Untitled
unknown
plain_text
a year ago
1.4 kB
3
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