【发布时间】:2019-10-11 22:58:35
【问题描述】:
我正在尝试解决一个涉及 POSIX 信号量的学校问题。我遇到了一个问题,我已将其范围缩小到此简化代码:
sem_t sem;
void parent() {
printf("waiting...\n");
sem_wait(&sem);
printf("done!\n");
}
void child() {
sem_post(&sem);
printf("go!\n");
exit(0);
}
int main() {
sem_init(&sem, 1, 0);
if(!fork())
child();
parent();
sem_destroy(&sem);
exit(0);
}
在 Linux 中编译(使用gcc -Wall -pthread sems.c -o sems)并运行此程序时,我得到以下输出(程序未完成执行):
waiting...
go!
因为我在子进程中调用sem_post(&sem),所以我希望父进程越过sem_wait(&sem),输出为:
waiting...
go!
done!
更奇怪的是,出于好奇,我尝试使用 CLion(Cygwin 编译器)在 Windows 上对其进行测试,并且程序按预期运行。我在这里错过了什么?
【问题讨论】: