繁体   English   中英

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

[英]Atomicness for a global variable shared by threads

好的,这是一个琐碎的问题。 问题是,我在这里找到的每个答案都有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_...伪函数。 您将获得顺序一致性。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM