Untitled
unknown
plain_text
9 months ago
1.9 kB
5
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