Cam*_*Cam 12 c++ heap stack thread-safety
我正在读这个:http://en.wikipedia.org/wiki/Thread_safety
以下函数是否是线程安全的?
void foo(int y){
int * x = new int[50];
/*...do some stuff with the allocated memory...*/
delete [] x;
}
Run Code Online (Sandbox Code Playgroud)
在文章中它说,为了线程安全,你只能使用堆栈中的变量.真?为什么?上述函数的后续调用不会在其他位置分配内存吗?
编辑:啊.看起来我误读了文章的这一部分:
子例程是可重入的,因此是线程安全的,如果
- 它使用的唯一变量来自堆栈
(我接受了它的意思
子例程是可重入的,因此是线程安全的,当且仅当
- 它使用的唯一变量来自堆栈
,根据下面的答案,并非如此)
mdm*_*dma 13
如果您在支持多线程的环境中进行编码,那么您可以非常肯定new是线程安全的.
虽然内存在堆上,但指向它的指针位于堆栈上.只有你的线程有指向这个内存的指针,所以没有并发修改的风险 - 没有其他线程知道内存修改它的位置.
如果要将此指针传递给另一个线程,然后在原始(或另一个)线程的同时修改此内存,则只会遇到线程安全问题.