我有一个工作线程处理工作项队列。
//producer
void push_into_queue(char *item) {
pthread_mutex_lock (&queueMutex);
if(workQueue.full) { // full }
else{
add_item_into_queue(item);
pthread_cond_signal (&queueSignalPush);
}
pthread_mutex_unlock(&queueMutex);
}
// consumer1
void* worker(void* arg) {
while(true) {
pthread_mutex_lock(&queueMutex);
while(workQueue.empty)
pthread_cond_wait(&queueSignalPush, &queueMutex);
item = workQueue.front; // pop from queue
add_item_into_list(item);
// do I need another signal here for thread2?
pthread_cond_signal(&queueSignalPop);
pthread_mutex_unlock(&queueMutex);
}
return NULL;
}
pthread_create (&thread1, NULL, (void *) &worker, NULL);
现在我想thread2
使用插入的数据,add_item_into_list()
但前提是项目已添加到列表中。请注意,该列表是永久性的,在整个程序期间不能清空或释放。
所以我的问题是:我需要另一个pthread_cond_signal
吗?如果是,这个信号会去哪里?以及我的其他工人的样子(规范形式)?