使用原子bool保护过程

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来确保一个进程只能由一个线程执行?

nos*_*sid 6

是的,可能会发生两个线程同时执行该功能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)