本地静态变量和多线程 - 它安全吗?

时间:2014-04-30 14:19:15

标签: c linux multithreading static

如果我有

pthread_create(newThread, &attr, threadFunc, arg)

多次调用以创建运行threadFunc的线程,而threadFunc类似于:

void threadFunc(){      static int x = 0;      }

这个x变量是否在所有线程之间共享?我知道它不在线程的堆栈中,因为它是静态的,它位于全局变量的位置。 如果没有,并且每个线程都有自己的x,则不需要锁定 - 是吗?

2 个答案:

答案 0 :(得分:4)

不,它不是线程安全的,并且x 在所有线程之间共享。此外,C中int的操作不能保证是原子的。

答案 1 :(得分:2)

使用x作为启动例程的所有线程共享静态threadFunc。如果您希望每个帖子都有x的副本,则应使用thread-specific data