gpt4 book ai didi

c - 线程共享的全局变量的原子性

转载 作者:太空宇宙 更新时间:2023-11-04 07:54:33 26 4
gpt4 key购买 nike

好吧,小问题。问题是,我在这里找到的每个答案都有 3/4 相互矛盾的答案。

我有一个非常简单的问题。我有一个名为 ABORT_SIGNAL 的全局变量。截至目前,这已声明为 volatile int ABORT_SIGNAL。我知道这不符合我的意愿……这是……

我有两个线程可以写入 ABORT_SIGNAL。它将从 0 开始,并在数秒后变为 1。每个其他线程都会定期读取此变量,检查该值是否已设置为 1。

下面会实现这个....

#include <stdint.h>
atomic_int ABORT_SIGNAL;
...

// When updating the value ...
atomic_store(&ABORT_SIGNAL, someValue);

// When reading the value ...
if (atomic_load_explicit(&ABORT_SIGNAL, memory_order_relaxed))
doSomething()

其他人也建议我需要执行以下操作。在每次写入问题 atomic_thread_fence(memory_order_acq_rel); 之后和每次读取问题之前 atomic_thread_fence(memory_order_acq_rel);

最佳答案

如果您想获得语义,使用宽松的一致性没有多大意义。

但是,坦率地说,所有这些看起来都太复杂了,并没有太大收获。

就用

_Bool _Atomic flag;

然后是通常的操作,您不需要使用所有这些atomic_... 伪函数。您可以获得顺序一致性。

然后,您可以调查这是否真的是瓶颈,并在特定位置用另一种一致性替换。

关于c - 线程共享的全局变量的原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51128606/

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