견인 프로세스 (자식 & 부모)를 세마포와 동기화하려고했지만 시도가 실패했습니다.C 언어로 프로세스 동기화
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <semaphore.h>
#include <fcntl.h>
#include <sys/stat.h>
int compteur=0;
sem_t *sem;
int main()
{
void *ret;
sem = sem_open("/sem", O_CREAT, 0644, compteur);
sem_init(sem, 0, 0);
pid_t pid;
pid=fork();
switch (pid)
{
case -1:
printf("Erreur: echec du fork()\n");
exit(1);
break;
case 0:
/* PROCESSUS FILS */
printf("Processus fils : pid = %d\n", getpid());
sem_post(sem);
break;
default:
sem_wait(sem);
/* PROCESSUS PERE */
printf("Ici le pere%d: le fils a un pid=%d\n",getpid(),pid);
printf("Fin du pere.\n");
}
}
내가 문제가 세마포어가 자식 프로세스에 표시되지 있다는 것을 생각 :
C 소스 코드는 다음과 같다. 이 문제를 어떻게 해결할 수 있습니까?
가능한 복제 (
man sem_init
에서) http://stackoverflow.com/questions/6847973/do-forked-child-processes -use-the-same-semaphore)를 먼저 사용하십시오. –아마 해결 했겠지만 해결 방법은 공유 메모리를 사용하여 세마포어를 공유하는 것입니다. 자식 프로세스를 만들 때 아빠의 변수는 공유되지 않고 (스레드와 같이) 공유되지 않으므로 sem_post 및 sem_wait를 호출합니다 다른 학자들! 그렇지 않으면 세마포어를 저장하고 다른 프로세스에서 공유 메모리 세그먼트를 사용하는 경우 나는 좋은 프로그램을 링크시킨다. [link] (https://dl.dropboxusercontent.com/u/6701675/informatica/processi_esame.c) –