1 c++ multithreading if-statement boolean atomic
请假设这段代码的多线程函数:
if( !executing_singular_process ){
executing_singular_process = true;
singular_process();
}
executing_singular_process = false;
Run Code Online (Sandbox Code Playgroud)
这里executing_singular_process是一个std::atomic<bool>.
是否存在可能性,其中一个线程将执行if( !executing_singular_process )在精确的时刻之间的另一个线程if( !executing_singular_process )和executing_singular_process = true;?
如果是这样,如何使用原子bool来确保一个进程只能由一个线程执行?
是的,可能会发生两个线程同时执行该功能singular_process().您可以使用compare_exchange来避免此问题:
bool expected = false;
if (executing_singular_process.compare_exchange_strong(expected, true)) {
singular_process();
executing_singular_process = false;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
204 次 |
| 最近记录: |