typedef struct dList{ struct dList *flink; struct dList *blink; int val; }* dListe; dListe li; pthread_mutex_t mut; void *consume(void *p){ int ret; dListe temp; while(any){ ret=pthread_mutex_lock(&mut); if(li!=NULL){ temp=li->flink; free(li); li=temp; if(li!=NULL) li->blink=NULL; } ret=pthread_mutex_unlock(&mut); } } void *produce(void *p){ int ret; dListe temp; while(any){ ret=pthread_mutex_lock(&mut); temp=malloc(sizeof(struct dList)); temp->flink=li; temp->blink=NULL; temp->val=1; if(li!=NULL) li->blink=temp; li=temp; ret=pthread_mutex_unlock(&mut); } } int main(){ pthread_t th1; pthread_t th2; int ret; ret=pthread_mutex_init(&mut,NULL); ret=pthread_create(&th2,NULL,produce,NULL); ret=pthread_create(&th1,NULL,consume,NULL); ret=pthread_join(th1,NULL); ret=pthread_join(th2,NULL); }