我有一个具有 1+N 个线程和 N 个 FIFO 队列的程序,例如:FIFO_queue_t* fifo_queque[N]。一个线程负责填充这 N 个 FIFO 队列。并且每个其他线程都与 1 个 FIFO 队列相关。
对于每个其他线程 i ,它会继续检查其 FIFO 队列 fifo_queue[i] 是否为空,如果不为空,则从 fifo_queue 中获取所有元素并再次使 fifo_queue 为空。
现在的问题是如何进行检查(如果您愿意,也可以进行轮询)。一种方法是
for(;;)
{
if(fifo_queue[i] != NULL)
{
fetch_all_element();
}
}
这样一来,可能是很耗CPU的吧?所以另一种方法是使用 pthread_cond_t 变量,
for(;;){
pthread_mutex_lock(&mut);
if(fifo_queue[i] == NULL) {
pthread_cond_wait(&cond, &mut);
fetch_all_element();
}
pthread_mutex_unlock(&mut);
}
但是这样,我需要为 N 个线程创建 N 个条件变量和互斥锁。是不是很耗资源?有没有好的方法可以在这种情况下阻塞线程直到它被满足?谢谢!