多线程同步和多线程唤醒

C++ pthread synchronization and multiple wake up for thread

本文关键字:多线程 唤醒 同步      更新时间:2023-10-16

一个关于c++线程同步的问题。我们假设有两个pthread: Thread1和Thread2。

  • Thread1正在执行任务,在某些情况下,他必须将状态更新通知Thread2。

  • Thread2正在从同步队列中提取数据。因此,如果队列为空,Thread2可以休眠。

如何在两种情况下唤醒Thread2:

  • 队列中的新消息通知;

  • Thread1的状态变化

实用代码示例

为简单起见,让Thread1将状态更改通知作为任务插入队列中,以便Thread2可以使用它。如果通知具有比常规工作任务更高的优先级,则允许Thread1在其他任务之前将其插入队列,使其成为下一个被消耗的任务。

为什么不使用相同的队列(但不同的命令代码)来通知thread2呢?Thread2只是以阻塞模式等待队列中的任何数据,对于每条新消息,检查是否有状态更新或数据,并做相应的操作。