一个普遍的事实是,pthread_mutex_lock()应始终应用于线程函数中使用的全局变量和静态变量。线程函数中的局部变量怎么样?
什么是用例,其中线程函数内的局部变量应该被锁定还是应该总是被锁定?
示例:
int func( void )
{
int var;
var++; // What are the usecases in which this should be locked?
}
pthread_create(&threadid1, NULL, func, NULL);
pthread_create(&threadid2, NULL, func, NULL);
答案 0 :(得分:1)
不,即使您使用相同的函数启动多个线程,也可以从您的线程安全地访问堆栈变量。
每个线程都有自己的堆栈,因此每次启动它时都会有一个单独的'int var'实例。
当然,通常的限制也适用。如果你以某种方式在多个线程中共享“var”,你仍然需要保护它,但是对于堆栈变量没有任何隐式或自动共享。