具有全局变量的 C++ 多线程

标签 c++ multithreading

有人知道原始全局变量是否线程安全吗?

// 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/

相关文章:

c++ - 实例与新实例热交换自身

c++ - 使用 volatile 在 C++ 98/03 中实现双重检查锁定

c++ - 如何读取bmp中的一个像素一个像素

c++ - 打开现有 cpp 文件时 Visual Studio 中没有构建菜单

java - SpinLock 可扩展性和限制

JAVA - ScheduledExecutorService 不退出线程

java - 此线程中的引用在哪里?

java - 在短时间内用 Java 执行数百万个任务?

c++ - MST Kruskal 算法(时间限制)

c++ - 在您自己的 Qt 应用程序中使用您自己的静态库