如何实现 使用匿名posix信号量的进程中的生产者/消费者问题? (这意味着我需要有2个进程依次打印一些文本,第2个可以从第1个分叉)
pthread_t pchild;
int i = 0;
pid_t pid;
sem_init(&fst, 1, 1);
sem_init(&scnd, 1, 0);
if((pid = fork()) == 0){
while(i<10){
sem_wait(&scnd);
printf("CHILD\n");
sem_post(&fst);
i++;
}
}else if(pid != -1){
while(i<10){
sem_wait(&fst);
printf("parent\n");
sem_post(&scnd);
i++;
}
}else{ printf("error - fork !!!\n");}
sem_destroy(&fst);
sem_destroy(&scnd);
此代码仅打印 “父母” - 1次, 但我在oracle docs http://docs.oracle.com/cd/E19253-01/816-5137/sync-39/index.html发现“未命名的信号量是私有的,通过fork()继承” 怎么了?
答案 0 :(得分:1)
在共享内存中分配信号量(如shm_open
所示),然后重试。
仅在pshared
中设置sem_init
参数是不够的。 sem_t *
参数引用的内存也必须在进程之间共享。