0
我假定我的程序应该工作是这样的: 1)初始化与值未命名信号= 0 为sem_init
(..)的第二个值是1,从而它在MAN信号量进程之间共享所述 2)创建的孩子,孩子一直等待,直到信号值变为1POSIX信号麻烦
父进程增加信号量的值,所以孩子现在应该退出 但它并没有真正退出,那么这就是问题所在
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <semaphore.h>
pid_t child;
void child_proc(sem_t* sem) {
sem_wait(sem);
printf("OK\n");
}
void parent_proc(sem_t* sem) {
sem_post(sem);
sleep(2);
int status;
waitpid(child, &status, 0);
}
int main(int argc, char* argv[]) {
sem_t sem;
sem_init(&sem, 1, 0);
child = fork();
if (0 == child) {
child_proc(&sem);
return 0;
}
parent_proc(&sem);
return 0;
}
我应该使用自己创建共享内存块并将sem_t放入它吗? – NinjaTurtle
@NinjaTurtle,是的,这几乎是你必须做的。 – zneak
好吧,做完之后我还有另外一个问题:男人说(http://man7.org/linux/man-pages/man2/msync.2.html)共享数据必须在每次更改后更新,所以我需要在每个信号量动作之后调用'msync()',是吗?:( – NinjaTurtle