为什么C/C++没有原子标志test_and_clear?

问题描述 投票:0回答:1

atomic_flag_test_and_set
是的!

atomic_flag_clear
是的!

atomic_flag_test_and_clear

atomic_flag_set

如果您想在某些上下文中对事件设置标志,并在其他上下文中检查并清除事件,C/C++ 不允许您在每个上下文中执行单个原子调用。

您必须反转标志,因此清除事件上的标志,在检查事件时检查并设置标志。

没什么大不了的,但在这种情况下似乎是倒退的,特别是考虑到标志的默认状态为 false,这在相反的意义上意味着默认情况下会断言事件。

我认为,可以使用带有atomic_exchange的atomic bool来代替。

c++11 c11 stdatomic
1个回答
0
投票

我认为Nicol Bolas成功了,这可能与atomic_flag保证无锁有关,而atomic bool则不然。

因此,这可能是一个实现限制。

© www.soinside.com 2019 - 2024. All rights reserved.