c++ - 使用 atomic bool 保护进程

标签 c++ multithreading if-statement boolean atomic

请假设这段代码是一个多线程函数:

if( !executing_singular_process ){
    executing_singular_process = true;
    singular_process();
}
executing_singular_process = false;

哪里executing_singular_processstd::atomic<bool> .

是否存在一个线程将执行的可能性 if( !executing_singular_process )在另一个线程中的精确时刻 if( !executing_singular_process )executing_singular_process = true;

如果是这样,如何使用 atomic bool 来确保一个进程永远只由一个线程执行?

最佳答案

是的,两个线程可能会同时执行函数 singular_process()。您可以使用 compare_exchange 避免此问题:

bool expected = false;
if (executing_singular_process.compare_exchange_strong(expected, true)) {
    singular_process();
    executing_singular_process = false;
}

关于c++ - 使用 atomic bool 保护进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23619563/

相关文章:

java - Erlang 并发和核心管理

android - 带有同步方法的 Anr 消息

php - 为什么这需要默认值?

c++ - 当用户按下 Ctrl 并单击时获取鼠标坐标

c# - 在 C# 应用程序的 DLL 中使用 CUDA

java - 为什么Java线程收不到中断标志?

javascript - 使用 switch 和 if else 语句来切换 JavaScript 计算器模式

javascript - 如何降低 if/else 复杂度?

c++ - 在函数中返回 "template class object"

c++ - 使用 Qt 以不同的方法线程化