c++ - 如何定时同步线程?

标签 c++ windows multithreading

我在定期同步多个线程时遇到问题,而不会在等待时消耗太多 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/

相关文章:

c++ - C++ 规范是否允许通过传递堆栈帧地址偏移来实现闭包?

c++ - while循环中的浮点比较与模数

windows - script.bat 可以更改 Windows PATH 环境变量吗

Windows 和 Linux 线程优先级等效

multithreading - QtConcurrent线程很慢!我究竟做错了什么?

java - 你会如何设计协作/可共享的文本编辑器 : Key points are given below

c# - 在 C# 中缓存异常实例是一种好习惯吗

c++ - 在 C++ 中计算欧拉数

c++ - 如何使用 QPainter 绘画?

windows - 系统关机时如何运行bat文件