给出定义std::atomic<int> ref_count;
int previous = ref_count.load();
for (;;)
{
if (previous == 0)
break;
if (ref_count.compare_exchange_weak(previous, previous + 1))
break;
}
Run Code Online (Sandbox Code Playgroud)
previous将保留之前的值。请注意,compare_exchange_weak如果失败,将更新之前的内容。