老师,go语言函数内的局部变量是线程安全的么?
来源:11-5 传统同步机制

hehehei
2018-07-14
两个线程用同一个函数,函数内部的局部变量是线程安全的?我记得以前学c的多线程,函数内的变量会被调用函数的线程共享,导致多个线程对函数内局部变量竞争 。而我用go测试,好像多个线程并不会对函数内局部变量竞争,跑go race 也没有发现data race。难道go语言的函数不像c那样是存放在栈内共享的,每次执行的都是原声明函数的副本?
写回答
1回答
-
ccmouse
2018-07-16
函数的局部变量c语言和go语言一样的,都是每次执行有自己的副本。你之前一定是理解有误。
很可能之前说到的是指针类型的变量。在多线程环境里每个局部的指针类型变量,虽然都是不同的副本,但是如果都指向同一块内存,那么就会有data race,c语言和go语言也一样,都会有。
这里可以参考我之前说到指针变量,以及函数参数的传递。
012018-07-18
相似问题
Go语言内存分配的问题
回答 1