Я работаю над заданием, в котором нам нужно использовать семафоры, чтобы сделать второй отпечаток родительского процесса до тех пор, пока ребенок не выполнит первый. Впервые с помощью семафоров я понял, как они работают, но я думаю, что у меня проблема с инициализацией sem_open().Семафор не работает должным образом
Следуя этим:
sem_t *sem_open(const char *name, int oflag);
Я создал это:
sem_t *sem = sem_open("MYSEM", O_CREAT , 2);
Однако при выполнении моей sem_wait являются ignored.This это вся моя программа:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <semaphore.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
/* void ChildProcess(void) ChildProcess prototype */
/* void ParentProcess(void) ParentProcess prototype */
int main(int argc, char ** argv){
int pid;
pid = fork();
sem_t *sem = sem_open("MYSEM", O_CREAT , 2);
if (pid<0)
{
printf("Cannot create a child process");
exit(EXIT_FAILURE);
}
else if (pid==0)
{
printf("I am the child process. \n");
printf("The child process is done. \n");
sem_post(sem);
exit(EXIT_SUCCESS);
}
else
{
printf("I am the parent process. \n");
sem_wait(sem);
printf("The parent process is done. \n");
}
sem_destroy(sem);
exit (EXIT_SUCCESS);
}
и что такое печать:
I am the parent process.
The parent process is done.
I am the child process.
The child process is done.
и что нужно напечатать это:
I am the parent process.
I am the child process.
The child process is done.
The parent process is done.
Так что вы говорите, это добавить sem_post (СЭМ) после parrent процесса? –
Произошло что-то очень странное. Я добавил sem_post (sem) в конце родителя, и он работал один раз, после чего он вернулся к неправильному принту, где игнорируется wait and post. –
Вы не проверяете возвращаемое значение 'sem_open', сделайте это первым - и найденный мной вызов' sem_open' имеет 4 аргумента (linux man) – KevinDTimm