底层用链表实现的生产者和消费者队列,能够同时支持多个读写线程。 #include <pthread.h> #include <stdio.h> #include <string.h> #include <unistd.h> #define MAXLINE (32) struct user_data { unsigned int n_size; char line[MAXLINE]; }; struct task { struct user_data *data; struct task *next; }; struct task *head = NULL,*tail = NULL; pthread_mutex_t mutex; pthread_cond_t cond1; void * readtask(void *args) { while(1) { pthread_mutex_lock(&mutex); if (head == NULL) { pthread_cond_wait(&cond1, &mutex); } //The data has been taken away by the other read thread. if (head == NULL) { pthread_mutex_unlock(&mutex); continue; } struct task *tmp = head; head = head->next; user_data *data = tmp->data; delete tmp; tmp = NULL; pthread_mutex_unlock(&mutex); printf("line = %s/n",data->line); delete data; data = NULL; } } void * writetask(void *args) { while (1) { struct task *t = new task(); struct user_data *data = new user_data(); static int i = 0; sprintf(data->line,"hello %d",i++); t->data = data; t->next = NULL; pthread_mutex_lock(&mutex); if (head == NULL) { head = t; tail = t; } else { tail->next = t; tail = t; } pthread_cond_broadcast(&cond1); pthread_mutex_unlock(&mutex); } } int main(int argc,char **argv) { pthread_t tid1,tid2,tid3; pthread_mutex_init(&mutex, NULL); pthread_cond_init(&cond1, NULL); //init the write and read threads pthread_create(&tid1, NULL, writetask, NULL); pthread_create(&tid2, NULL, readtask, NULL); pthread_create(&tid3, NULL, readtask, NULL); pthread_join(tid1,NULL); pthread_join(tid2,NULL); pthread_join(tid3,NULL); return 0; }