gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:27:50 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com