完成 Benoit 的回答,为了在您的主线程和工作线程之间进行通信,您可以使用条件变量。工人们做这样的事情:
while (true)
{
pthread_mutex_lock(workQueueMutex);
while (workQueue.empty())
pthread_cond_wait(workQueueCond, workQueueMutex);
/* if we get were then (a) we have work (b) we hold workQueueMutex */
work = pop(workQueue);
pthread_mutex_unlock(workQueueMutex);
/* do work */
}
和主人:
/* I/O received */
pthread_mutex_lock(workQueueMutex);
push(workQueue, work);
pthread_cond_signal(workQueueCond);
pthread_mutex_unlock(workQueueMutex);
这将唤醒一项空闲工作以立即处理请求。如果没有可用的工作人员,工作将被出列并稍后处理。