c++ - 全局变量多读一写多线程安全吗?

标签 c++ multithreading race-condition

我正在尝试用 C++ 编写一个程序,其中一个全局变量由多个线程读取并由一个线程更新。在这种情况下,我是否需要编写任何信号量之类的东西,或者我可以保持原样,因为实际上只有 1 个线程正在写入全局变量,因此不存在可能的竞争条件。

我也是信号量的新手,所以如果可能的话,我需要避免麻烦。

程序是这样的: writer thread: 不断检查管脚是否有高电压,高时设置全局变量

读者线程:在无限循环中不断检查全局变量,并在设置时做一些事情。

最佳答案

很简单:如果多个线程可以在没有同步的情况下同时访问一个对象,并且这些线程中至少有一个正在写入该对象,那么程序就会发生数据竞争。具有数据竞争的程序的行为是未定义的。

您可以通过使用互斥锁来防止同时访问,或者在许多情况下,通过使用原子对象来提供同步。

如果您没有正确同步读取和写入,您可以享受流行的客厅游戏“猜猜这个程序可能做什么”。有很多消息线程可以解释为什么在某些情况下数据竞争是可以的。如果你真的不在乎你的程序是否真的能正常工作,那也没关系。如果您确实关心,请同步。

关于c++ - 全局变量多读一写多线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52999752/

相关文章:

c++ - 为什么这段代码试图调用复制构造函数?

c++ - OpenCV:VideoWriter 的写入是否应该在独立线程中运行?

c++ - 从辅助线程调用 UpdateWindow()

c++ - 从基类的 vector 访问继承的类方法

c++ - 如何在 win32 GUI 应用程序中向用户显示快速更新的数据?

java - 在多线程应用程序中使用 VTD

javascript - 需要加载 javascript 库还是只是等待它加载?

php - 插入表时的竞争条件

c++ - 尽管尝试创建两个线程,但只创建了一个线程

c++ - strcpy 字符指针中止