假设我们的队列结构如下:
typedef struct {
buffer_t* buffer;
int empty;
int full;
pthread_mutex_t lock;
pthread_cond_t queue_full;
pthread_cond_t queue_empty;
} queue;
如果有两个队列,可能是queue01和queue02,并且一些消费者和生产者在它们上工作。
我们可以实现一个消费者在两个队列上工作吗(不创建新线程),一些伪代码,例如:
while(queue01->empty && queue02->empty){
channel_wait(&(queue01->queue_full), &(queue01->lock)) \
|| channel_wait(&(queue02->queue_full), &(queue02->lock));
// ... do some work with queue01's or queue02's lock
}