我的问题可能很蠢,但请你容忍我。如果两个go例程调用相同的函数,它们会共享该函数中的变量吗?在函数中声明变量并自由使用安全吗?
func main() {
go func1(1)
go func1(2)
}
func func1(a int) {
something := a
// do something
}在上面的代码中,当两个go例程正在调用相同的函数时,它们会用彼此的变量声明来阻止吗?如果go例程不整齐或其他什么的话,something的值会改变吗?
发布于 2022-11-25 12:57:48
will they hinder the variable declaration -不。本质上是一个函数..。所以如果在函数中声明变量..。不会有任何问题,而且正常工作。
但是,如果变量不是在函数内部声明的,而是在函数的作用域之外声明的,那么go例程的顺序将阻碍该值,例如
import (
"fmt"
"time"
)
var something int
func test(a int) {
something += a
fmt.Println("something", something)
}
func main() {
fmt.Println("Testing Something")
go test(20)
go test(3)
time.Sleep(1 * time.Second) // crude way without using channels or waitgroup.
}https://stackoverflow.com/questions/74572901
复制相似问题