Untitled
unknown
plain_text
a year ago
1.9 kB
7
Indexable
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>
#define BUFFER_SIZE 1 // גודל הבאפר
char buffer[BUFFER_SIZE]; // הבאפר המשותף
sem_t empty; // סמפור לניהול תאים ריקים
sem_t full; // סמפור לניהול תאים מלאים
void* producer(void* args) {
for (char ch = 'A'; ch <= 'Z'; ch++) {
sem_wait(&empty); // חכה עד שיש מקום ריק בבאפר
buffer[0] = ch; // הכנס את האות לבאפר
printf("Producer produced: %c\n", ch);
sem_post(&full); // הגדל את מונה התאים המלאים
sleep(1); // השהיה קצרה להמחשה
}
return NULL;
}
void* consumer(void* args) {
for (int i = 0; i < 26; i++) {
sem_wait(&full); // חכה עד שיש תא מלא
char ch = buffer[0]; // קרא את האות מהבאפר
printf("Consumer consumed: %c\n", ch);
sem_post(&empty); // הגדל את מונה התאים הריקים
sleep(1); // השהיה קצרה להמחשה
}
return NULL;
}
int main() {
pthread_t prodThread, consThread; // חוטים ל-producer ול-consumer
sem_init(&empty, 0, BUFFER_SIZE); // אתחול סמפור התאים הריקים
sem_init(&full, 0, 0); // אתחול סמפור התאים המלאים
pthread_create(&prodThread, NULL, producer, NULL); // יצירת חוט ה-producer
pthread_create(&consThread, NULL, consumer, NULL); // יצירת חוט ה-consumer
pthread_join(prodThread, NULL); // המתן לסיום חוט ה-producer
pthread_join(consThread, NULL); // המתן לסיום חוט ה-consumer
sem_destroy(&empty); // השמדת סמפור התאים הריקים
sem_destroy(&full); // השמדת סמפור התאים המלאים
return 0;
}
Editor is loading...
Leave a Comment