gpt4 book ai didi

C++ atomic_flag 查询状态

转载 作者:IT老高 更新时间:2023-10-28 12:42:44 24 4
gpt4 key购买 nike

我正在使用 C++ std::atomic_flag作为一个原子 bool 标志。将标志设置为真或假不是问题,但是如何在不将其设置为某个值的情况下查询标志的当前状态?我知道有方法'atomic_flag_clear ' 和 ' atomic_flag_set '。它们确实会返回以前的状态,但也会修改当前状态。有什么方法可以查询标志状态而不修改它还是我必须使用完整的'std::atomic<bool> '。

最佳答案

您无法读取 std::atomic_flag 的值不将其设置为 true .这是设计使然。它不是一个 bool 变量(我们有 std::atomic<bool>),而是一个保证在所有支持 C++11 的架构上无锁的最小标志。

在某些平台上,唯一的原子指令是交换指令。在这样的平台上,std::atomic_flag::test_and_set()可以用 exchange var,1 来实现和 clear()exchange var,0 ,但没有读取值的原子指令。

所以,如果你想读取值而不改变它,那么你需要 std::atomic<bool> .

关于C++ atomic_flag 查询状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11099601/

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