提问人:Kostya Vasilyev 提问时间:3/12/2023 最后编辑:Kostya Vasilyev 更新时间:3/12/2023 访问量:147
使用 std::atomic 进行一次执行
Using std::atomic for once-only execution
问:
我使用这样的一段代码只执行一次:
class Test {
public:
void foo() {
if (m_barrier.exchange(true)) {
return;
}
// This should only execute once
}
private:
std::atomic<bool> m_barrier { false };
};
该函数由多个线程多次调用,但下面的代码只能执行一次(每个对象实例)。foo
exchange
我以为这是正确的代码 - 直到昨天我发现有时下面的代码执行不止一次。exchange
这是在 Android 上,CPU aarch64,所以可能是 Android 特定的错误,它发生在三个不同的手机上 - 或者更有可能是我遗漏了一些东西,代码不能保证只执行一次?std
请不要建议使用,我不能在这里使用,因为...原因。std::once
更新:是的,我可以用非原子代替它,这是可以理解的,问题是为什么线程不安全。std::mutex
bool
std::atomic
答: 暂无答案
评论
m_barrier
m_barrier
m_barrier
std::once