我的类型程序中有一个原子变量atomic<int>。在某些地方,我不需要以原子方式访问其中的值,因为我只是检查它是否为 0。换句话说,在这些情况下,我想避免在原子访问时发生的总线锁定等开销。
如何以非原子方式访问原子变量。使用 (int) 对其进行类型转换是否足够,如下所示?如果没有,我认为,我该怎么做?
atomic<int> atm;
int x;
........
x = (int)atm; // Would this be a non-atomic access, no bus locking et all?
Run Code Online (Sandbox Code Playgroud)
您无法摆脱原子性属性。但是您可以通过放宽内存排序保证来减少使用原子变量所涉及的一些开销。
std::atomic<int> a;
int value = a.load(std::memory_order_relaxed);
if(value == 0) {
// blah!
}
Run Code Online (Sandbox Code Playgroud)
但是,我不建议这样做,并且我回应所有敦促您避免这种情况的评论。你确定你为原子操作支付了足够高的成本,这样做是值得的吗?