我在定期同步多个线程时遇到问题,而不会在等待时消耗太多 CPU。
我有一个主线程和几个计算线程,它们的形式都是:
CalcThread() // x N threads
{
loop{
- do some calc stuff (variable but finite duration).
- wait until main thread give a "continue" signal.
}
}
MainThread()
{
loop{
- wait for all calc threads to be in waiting state.
- do some calc synthesis stuff.
- send a "continue" signal to calc threads.
}
}
目前我让我的线程互相等待循环 std::this_thread::yield() 指令,并在原子共享标志上设置一些条件。它有效,但这些循环非常消耗 CPU。
必须有另一种解决方案,可能使用互斥锁和 condition_variable,但我是新手,我所有的尝试都导致失败......
有人有想法吗?感谢您的帮助。
最佳答案
条件变量正是您想要的。让你的计算线程使用 std::condition_variable::wait
让它们阻塞直到被你的主线程唤醒。让主线程调用std::condition_variable::notify_all
解锁所有计算线程。
关于c++ - 如何定时同步线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61922988/