请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,go语言函数内的局部变量是线程安全的么?

两个线程用同一个函数,函数内部的局部变量是线程安全的?我记得以前学c的多线程,函数内的变量会被调用函数的线程共享,导致多个线程对函数内局部变量竞争 。而我用go测试,好像多个线程并不会对函数内局部变量竞争,跑go race 也没有发现data race。难道go语言的函数不像c那样是存放在栈内共享的,每次执行的都是原声明函数的副本?

正在回答 回答被采纳积分+3

1回答

ccmouse 2018-07-16 22:23:22

函数的局部变量c语言和go语言一样的,都是每次执行有自己的副本。你之前一定是理解有误。

很可能之前说到的是指针类型的变量。在多线程环境里每个局部的指针类型变量,虽然都是不同的副本,但是如果都指向同一块内存,那么就会有data race,c语言和go语言也一样,都会有。

这里可以参考我之前说到指针变量,以及函数参数的传递。

0 回复 有任何疑惑可以回复我~
  • 提问者 hehehei #1
    谢谢老师,试了一下,确实是,每个线程局部变量的地址都不一样。问题偏了,php这种脚本语言写多了,基础知识不扎实
    回复 有任何疑惑可以回复我~ 2018-07-18 22:13:15
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信