我正在学习C++原子和多线程的基础知识。 根据状态(运行/休眠),我必须运行一个函数(并将状态更新为运行状态)或者什么也不做。我在C++ 11中使用atomic_compare_exchange_strong或atomic_exchange吗?
atomic_compare_exchange_strong和atomic_exchange是否有区别,如下面的代码片段所示?任何一种方法的副作用或陷阱?
std::atomic<State> state{State::sleeping};
for (int i = 0; i<4; i++)
{
State expected{State::sleeping};
//if (std::atomic_compare_exchange_strong(&state, &expected, State::running))
if (state.compare_exchange_strong(expected, State::running))
{
cout << "running" << endl;
continue;
}
cout << "sleeping" << endl;
}
VS
std::atomic<State> state{State::sleeping};
for (int i = 0; i<4; i++)
{
//if (std::atomic_exchange(&state, State::running) != State::running)
if (state.exchange(State::running) == State::running)
{
cout << "running" << endl;
continue;
}
cout << "sleeping" << endl;
}
当您阅读这两个函数的文档时发生了什么? –
怀疑和困惑? – user965972