Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<semaphore.h>
- #include<pthread.h>
- int counter=0;
- sem_t S,full,empty;
- void *producer() {
- while(1) {
- sem_wait(&empty);
- sem_wait(&S);
- counter++;
- sleep(1);
- printf("Counter %d\n",counter);
- printf("Produced \n");
- sem_post(&S);
- sem_post(&full);
- }
- }
- void *consumer() {
- while(1) {
- sem_wait(&full);
- sem_wait(&S);
- counter--;
- sleep(2);
- printf("Counter %d\n",counter);
- printf("Consumed \n");
- sem_post(&S);
- sem_post(&empty);
- }
- }
- main() {
- sem_init(&S,1,1);
- sem_init(&full,1,0);
- sem_init(&empty,1,4);
- pthread_t thread1,thread2;
- pthread_create(&thread1,NULL,&producer,NULL);
- pthread_create(&thread2,NULL,&consumer,NULL);
- pthread_join(thread1,NULL);
- pthread_join(thread2,NULL);
- }
- /*
- Counter 1
- Produced
- Counter 2
- Produced
- Counter 3
- Produced
- Counter 4
- Produced
- Counter 3
- Consumed
- Counter 2
- Consumed
- Counter 1
- Consumed
- Counter 0
- Consumed
- Counter 1
- Produced
- Counter 2
- Produced
- Counter 3
- Produced
- Counter 4
- Produced
- Counter 3
- Consumed
- Counter 2
- Consumed
- Counter 1
- Consumed
- */
Advertisement
Add Comment
Please, Sign In to add comment