gpt4 book ai didi

c++ - 在 C++ 中通过确认通知

转载 作者:行者123 更新时间:2023-11-30 01:03:15 29 4
gpt4 key购买 nike

我有一些并行运行的循环并且有这些行:

std::unique_lock <std::mutex> lock(_condLoopMutex);
_condLoopCondition.wait(lock, [this]() { return _conditionReady || _condLoopStopped; });
_conditionReady = false;

// DO SOMETHING

bool 变量

_conditionReady

通过以下构造在并行线程中设置:

_conditionReady = true;
_condLoopCondition.notify_one();

但是,有时我的程序会死机。通知似乎介于函数“等待”传递参数和检查“_conditionReady”变量之间。

为了避免这种情况,我实现了以下措施:

while (_conditionReady && !_condLoopStopped)
{
_condLoopCondition.notify_one();
std::this_thread::sleep_for(std::chrono::microseconds(100));
}

所以它一直通知直到

_conditionReady == false

这意味着等待结束。

这是这个问题的唯一解决方案吗 - 重新通知直到等待结束?有没有其他常规方法来处理这些问题?

最佳答案

首先, sleep 永远不是解决错误的方法。它应该在每次使用时真正生成一个编译器警告,这将传达相同的信息。

现在,每当您修改受条件保护的控制变量时,都应该在持有互斥锁的情况下完成 - 通常与 cond.wait() 中使用的互斥锁相同。您的代码不会执行此操作。

关于c++ - 在 C++ 中通过确认通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54219949/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com