gpt4 book ai didi

C++ 线程安全 : If only one thread can write to a non-atomic variable but multiple threads read from it.。可以遇到问题吗?

转载 作者:行者123 更新时间:2023-12-01 14:35:51 25 4
gpt4 key购买 nike

如果一个线程读取另一个线程正在写入的非原子原始变量,它是否保证在写入之前或之后读取该值,或者它可以在写入期间以某种方式读取一些损坏的版本?

我意识到像链表这样的集合是另一回事。

最佳答案

不,没有任何保证。

虽然我真的应该停在那里,因为这是一个完整的答案,但如果您认为“这怎么可能出错”,请考虑一个对非原子变量的写入不是原子的实现。所以如果你写了0x2F然后写0x30,有可能另一个线程可能会在写之前读取第一个半字节,然后读取第二个半字节并得到0x20

另外,假设一个非原子变量的值为零并且此代码运行:

#define LAUNCH 1
#define DO_NOT_LAUNCH 0

if (war_has_been_declared)
non_atomic_variable = LAUNCH;
else
non_atomic_variable = DO_NOT_LAUNCH;

没有规则禁止实现将代码优化到这个:

non_atomic_variable = LAUNCH;
if (! war_has_been_declared)
non_atomic_variable = DO_NOT_LAUNCH;

这意味着即使尚未宣战,另一个线程也可能会看到 LAUNCH 命令!

但重要的是要记住,根本没有任何保证。你能不能想出一个可能出错的合理方法并不重要。

关于C++ 线程安全 : If only one thread can write to a non-atomic variable but multiple threads read from it.。可以遇到问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62440760/

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