有人知道原始全局变量是否线程安全吗?
// global variable
int count = 0;
void thread1()
{
count++;
}
void thread2()
{
count--;
if (count == 0) print("Stuff thing");
}
我可以在没有对 count
进行任何锁定保护的情况下这样做吗?
谢谢。
最佳答案
这不是线程安全的。你在这里有一个竞争条件。原因是 count++
不一定是原子的(意味着不是单个处理器操作)。该值首先加载,然后递增,然后写回。在每个步骤之间,另一个线程也可以修改该值。
关于具有全局变量的 C++ 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6450753/