我試圖同步兩個進程(孩子&父)與信號量,但我的嘗試失敗。與C語言進程同步
的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");
}
}
我覺得現在的問題是,該信號是不是在子進程可見。我怎麼解決這個問題?
可能的複製,而是看[這裏](http://stackoverflow.com/questions/6847973/do-forked-child-processes首先使用相同的信號量)。 –
可能你已經解決了,但是這裏的解決方案是使用sharedmemory來共享信號量:當你創建一個子進程時,父親的變量是DUPLICATED,而不是共享的(比如在線程中),所以你在調用sem_post和sem_wait不同的SEMAPHORES!否則,如果使用sharedmemory段來保存信號量並將其用於不同的進程。我鏈接你一個運行良好的程序:[鏈接](https://dl.dropboxusercontent.com/u/6701675/informatica/processi_esame.c) –