atomic_flag_test_and_set
是的!
atomic_flag_clear
是的!
atomic_flag_test_and_clear
不
atomic_flag_set
不
如果您想在某些上下文中对事件设置标志,并在其他上下文中检查并清除事件,C/C++ 不允许您在每个上下文中执行单个原子调用。
您必须反转标志,因此清除事件上的标志,在检查事件时检查并设置标志。
没什么大不了的,但在这种情况下似乎是倒退的,特别是考虑到标志的默认状态为 false,这在相反的意义上意味着默认情况下会断言事件。
我认为,可以使用带有atomic_exchange的atomic bool来代替。
我认为Nicol Bolas成功了,这可能与atomic_flag保证无锁有关,而atomic bool则不然。
因此,这可能是一个实现限制。