gpt4 book ai didi

c++ - 将 C++0x 的 atomic 作为非原子访问

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:31:43 25 4
gpt4 key购买 nike

我的程序中有一个 atomic<int> 类型的原子变量.在某些地方,我不需要以原子方式访问其中的值,因为我只检查它是否为 0。换句话说,在那些情况下,我想避免在有原子访问时发生的总线锁定等开销。

如何以非原子方式访问原子变量。使用 (int) 对其进行类型转换是否足够,如下所示?如果不是,我想我该怎么做?

atomic<int> atm;
int x;
........
x = (int)atm; // Would this be a non-atomic access, no bus locking et all?

最佳答案

您无法摆脱原子性属性。但是您可以通过放宽内存排序保证来减少使用原子变量所涉及的一些开销。

std::atomic<int> a;

int value = a.load(std::memory_order_relaxed);
if(value == 0) {
// blah!
}

不过,我不建议这样做,并且我赞同所有敦促您避免这样做的评论。您确定您为原子操作支付了足够高的成本,进行这种黑客攻击并可能引入线程错误是值得的吗?

关于c++ - 将 C++0x 的 atomic<int> 作为非原子访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7234270/

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