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

标签 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);

最佳答案

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

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

当然,通常的限制确实适用。如果您以某种方式跨多个线程共享“var”,您仍然需要保护它,但堆栈变量没有隐式或自动共享。

关于linux - 具有局部变量的线程函数是否需要 pthread_mutex_lock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20262968/

相关文章:

c - pthread_join() 并在 main 中休眠

locking - 强制互斥体解锁(可能来自不同的线程)?

linux - 如何根据文件名模式删除文件?

python - 如何在Centos Linux中设置python路径

linux - grep 限制字符 - 一行

c - 变量失去值(value)

c - 为什么threadID是唯一的?

c++ - 为什么 pthread_getname_np() 在 Linux 的线程中失败?

regex - 在 sed 或 awk 中的两个匹配项之间的最后一行之前插入文本

linux - 如何获得所有者 :group name of a file/directory with perl?