C语言中原子变量的存储顺序策略

qgelzfjb  于 2023-01-12  发布在  其他
关注(0)|答案(1)|浏览(140)

我正在写一些代码,其中一个定时器递增一个全局变量,该变量维护我的内部系统滴答计数。还有其他API,如getCount()、addToSystemTick()、incrementSystemTick()。我正在尝试使用原子变量作为system_tick_counter。我的问题是,对于添加或获取变量,我应该执行什么内存顺序策略?

ktca8awb

ktca8awb1#

您可以遵循<stdatomic.h>的约定,默认提供seq_cst,并让getCount_explicit(memory_order)允许传递调用者选择的内存顺序。
但是对于系统节拍变量,relaxed可能比较合适,因为您可能不会将其用于线程之间的同步。
如果您也使用这些计时器值作为序列号,则类似下面的代码可能会有意义:

if (getCount_explicit(memory_order_acquire) >= x)
         read other things updated before that tick number

如果所有的修改都是原子RMW,那么它就形成了一个释放序列,我认为acq_rel增量可以给予必要的属性来保证安全,这完全取决于你的用例是否相关。

相关问题