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