Untitled
unknown
c_cpp
a year ago
1.3 kB
7
Indexable
#include <stdio.h>
int mutex = 1, full = 0, empty = 5, x = 0;
void producer();
void consumer();
int wait(int);
int signal(int);
int main() {
int n;
printf("\n1. Producer\n2. Consumer\n3. Exit\n");
while(1) {
printf("\nEnter your choice: ");
scanf("%d", &n);
switch(n) {
case 1:
if ((mutex == 1) && (empty != 0)) {
producer();
} else {
printf("Buffer is full\n");
}
break;
case 2:
if ((mutex == 1) && (full != 0)) {
consumer();
} else {
printf("Buffer is empty\n");
}
break;
case 3:
return 0;
default:
printf("Invalid choice\n");
break;
}
}
return 0;
}
int wait(int s) {
return (--s);
}
int signal(int s) {
return (++s);
}
void producer() {
mutex = wait(mutex);
full = signal(full);
empty = wait(empty);
x++;
printf("Producer produces item %d\n", x);
mutex = signal(mutex);
}
void consumer() {
mutex = wait(mutex);
full = wait(full);
empty = signal(empty);
printf("Consumer consumes item %d\n", x);
x--;
mutex = signal(mutex);
}
Editor is loading...
Leave a Comment