#include #include "averiles.h" typedef struct dList{ struct dList *flink; struct dList *blink; int val; }* dListe; dListe li; pthread_mutex_t mut; void print(dListe x) { dListe ptr; for (ptr= x; ptr!= NULL; ptr=ptr->flink) { printf(" %d -> ", ptr->val); } printf("\n"); } void *consume(void *p){ int ret; dListe temp; while(any){ ret=pthread_mutex_lock(&mut); printf("c..."); if(li!=NULL){ printf("onsuming "); temp=li->flink; free(li); li=temp; if(li!=NULL) li->blink=NULL; } printf("\n "); print(li); ret=pthread_mutex_unlock(&mut); } } void *produce(void *p){ int ret; dListe temp; while(any){ ret=pthread_mutex_lock(&mut); printf("producing \n"); temp=malloc(sizeof(struct dList)); temp->flink=li; temp->blink=NULL; temp->val=1; if(li!=NULL) li->blink=temp; li=temp; print(li); ret=pthread_mutex_unlock(&mut); } } int main(){ init(); 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); }