我制作执行该代码2倍的程序。 2过程进入信号量和卡住(HERE注释)。为什么会发生以及如何解决?
sem_t *sem = sem_open(SEM_NAME, O_RDWR);
if (sem == SEM_FAILED) {
perror("sem_open(3) failed");
exit(EXIT_FAILURE);
}
int j = atoi(argv[1]);
int i;
for (i = 0; i < 2; i++) {
printf("%i\n",getpid() );
//HERE!!!!!
if (sem_wait(sem) < 0) {
perror("sem_wait(3) failed on child");}
printf("PID %ld acquired semaphore\n", (long) getpid());
if (sem_post(sem) < 0) {
perror("sem_post(3) error on child");}
printf("wysz\n");
sleep(1);
}
semcl(sem);
return 0;
答案 0 :(得分:0)
您应使用此按钮创建信号量
sem_open(SEM_NAME, O_RDWR,0777, 1);
将信号量的起始值设置为1。