采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
两个线程用同一个函数,函数内部的局部变量是线程安全的?我记得以前学c的多线程,函数内的变量会被调用函数的线程共享,导致多个线程对函数内局部变量竞争 。而我用go测试,好像多个线程并不会对函数内局部变量竞争,跑go race 也没有发现data race。难道go语言的函数不像c那样是存放在栈内共享的,每次执行的都是原声明函数的副本?
函数的局部变量c语言和go语言一样的,都是每次执行有自己的副本。你之前一定是理解有误。
很可能之前说到的是指针类型的变量。在多线程环境里每个局部的指针类型变量,虽然都是不同的副本,但是如果都指向同一块内存,那么就会有data race,c语言和go语言也一样,都会有。
这里可以参考我之前说到指针变量,以及函数参数的传递。
谢谢老师,试了一下,确实是,每个线程局部变量的地址都不一样。问题偏了,php这种脚本语言写多了,基础知识不扎实
登录后可查看更多问答,登录/注册
语法+分布式爬虫实战 为转型工程师量身打造
3.7k 14
688 1
2.0k 1
1.1k 12