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