具有局部变量的线程函数是否需要pthread_mutex_lock?

时间:2013-11-28 10:02:00

标签: linux pthreads

一个普遍的事实是,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);

1 个答案:

答案 0 :(得分:1)

不,即使您使用相同的函数启动多个线程,也可以从您的线程安全地访问堆栈变量。

每个线程都有自己的堆栈,因此每次启动它时都会有一个单独的'int var'实例。

当然,通常的限制也适用。如果你以某种方式在多个线程中共享“var”,你仍然需要保护它,但是对于堆栈变量没有任何隐式或自动共享。