Untitled
unknown
plain_text
9 months ago
1.4 kB
1
Indexable
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <semaphore.h> #include <fcntl.h> #include <sys/wait.h> // פונקציה לעיבוד תהליך הילד void child_process(const char *name, sem_t *sem) { sem_wait(sem); // מחכה לסמפור printf("%s\n", name); fflush(stdout); sem_post(sem); // משחרר את הסמפור exit(0); // מסיים את תהליך הילד } int main() { // יצירת הסמפור sem_t *sem = sem_open("/mysem", O_CREAT, 0644, 1); if (sem == SEM_FAILED) { perror("sem_open failed"); exit(1); } // רשימת שמות התהליכים לפי סדר ההדפסה המבוקש const char *order[] = {"p4", "p3", "p5", "p1", "p6", "p2"}; pid_t pids[6]; // יצירת תהליכי הילד for (int i = 0; i < 6; i++) { pid_t pid = fork(); if (pid < 0) { perror("fork failed"); exit(1); } else if (pid == 0) { // תהליך ילד child_process(order[i], sem); } else { pids[i] = pid; // שמירת מזהי התהליכים של הילדים } } // ממתין לסיום כל תהליכי הילדים for (int i = 0; i < 6; i++) { waitpid(pids[i], NULL, 0); } // סוגר ומשחרר את הסמפור sem_close(sem); sem_unlink("/mysem"); return 0; }
Editor is loading...
Leave a Comment