多个go routines可以阻碍同一个函数中的变量吗?

我的问题可能很愚蠢,但请耐心等待。如果两个 go-routines 调用同一个函数,它们会共享该函数中的变量吗?在函数内部声明变量并随意使用是否安全?


func main() {

 go func1(1)

 go func1(2)

}


func func1(a int) {

 something := a

 // do something

}

在上面的代码中,当两个 go-routines 调用同一个函数时,它们会阻碍彼此的变量声明吗?something如果 go 例程不按顺序或其他原因,值会改变吗?


www说
浏览 126回答 1
1回答

一只名叫tom的猫

will they hinder the variable declaration- 不。本质上它是一个函数.. 所以如果你在函数内部声明变量.. 不会有任何问题并且它可以正常工作。但是如果变量不是在函数内部而是在函数范围之外声明的,那么 go 例程的顺序将阻碍该值,例如import (    "fmt"    "time")var something intfunc 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.}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go