C++ - 线程和多个队列

5 c++ queue multithreading posix pthreads

我需要构建一个工作系统(表示为线程)和(多个)队列.单个作业正在其中一个队列中等待,并等待工作线程处理它们.每个工作人员只能处理一些队列中的作业.没有旋转等待.C/C++,pthreads,标准POSIX.

对我来说问题是"多个队列"的事​​情.我知道如何用一个队列来实现它.工作人员需要等待他们可以处理的所有队列(等待其中的任何队列).

在Windows上我会使用WaitForMultipleObjects,但这需要是多平台的.

我不想要任何特定的代码,只是我应该使用的模型的提示或描述.提前致谢.

小智 5

怎么样:

  • 所有工作线程都在等待信号量
  • 当任何东西被添加到队列中时,信号量会递增,从而唤醒单个线程
  • 线程检查它感兴趣的队列,处理其中一个并返回等待信号量

您将需要额外的互斥锁来控制对队列的实际读取和写入.


Ada*_*eld 4

您可以做的是使用条件变量。让工作线程等待条件变量。当作业添加到任何作业队列时,向条件变量发出信号。然后,当工作线程醒来时,它会检查它正在等待的队列。如果他们中的任何一个人有工作,就会将该工作从队列中删除。否则,它会返回等待条件变量。等待条件变量会使线程进入睡眠状态,因此不会消耗 CPU 时间。

当然,不言而喻,您应该使用互斥体(例如pthread_mutex_t)来保护对作业队列的所有访问。