【发布时间】:2020-07-12 15:38:59
【问题描述】:
在以下示例中,实际发生了什么?为什么兑换成功后价值没有变化?
直播:https://wandbox.org/permlink/f5VYSKfQ9UJqa8FQ
std::atomic<bool> flag{false};
int main()
{
std::thread thread([](){
while(true){
// wait until flag not becomes true
{
bool expect = true;
while(!flag.compare_exchange_strong(expect, false, std::memory_order_acq_rel)){
std::cout << "wait" << std::endl;
}
}
std::cout << "work" << std::endl;
}
});
flag.store(true, std::memory_order_release);
thread.join();
}
输出:
work
wait
work
wait
...
【问题讨论】:
-
我不明白你的问题。您希望看到什么输出?
-
我认为你不明白
compare_exchange_strong做了什么。这是一个复杂的操作。阅读有关它的参考资料en.cppreference.com/w/cpp/atomic/atomic/compare_exchange -
@jtbandes 我希望“等待等待工作等待等待......”
标签: c++ atomic compare-and-swap