Untitled
unknown
plain_text
a year ago
1.2 kB
5
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <semaphore.h>
#include <pthread.h>
#define MAX_ITEMS 26 // A-Z
sem_t empty, full;
int buffer = 0;
int in = 0, out = 0;
void *producer(void *args) {
for (char c = 'A'; c <= 'Z'; c++) {
sem_wait(&empty); // המתן עד שיהיה מקום פנוי בחוצץ
buffer = c; // הכנס את התו לחוצץ
printf("Producer wrote: %c\n", c);
sem_post(&full); // העירו את הצרכן
}
return NULL;
}
void *consumer(void *args) {
char c;
for (int i = 0; i < MAX_ITEMS; i++) {
sem_wait(&full); // המתן עד שיהיה פריט בחוצץ
c = buffer;
printf("Consumer read: %c\n", c);
sem_post(&empty); // העירו את היצרן
}
return NULL;
}
int main() {
pthread_t prod, cons;
sem_init(&empty, 0, MAX_ITEMS); // מקום פנוי בחוצץ
sem_init(&full, 0, 0); // חוצץ ריק בהתחלה
pthread_create(&prod, NULL, producer, NULL);
pthread_create(&cons, NULL, consumer, NULL);
pthread_join(prod, NULL);
pthread_join(cons, NULL);
sem_destroy(&empty);
sem_destroy(&full);
return 0;
}Editor is loading...
Leave a Comment