为什么这个信号量卡住了

Why this semaphores stuck

我制作的程序执行了 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;

你应该使用这个创建信号量

sem_open(SEM_NAME, O_RDWR,0777, 1);

设置信号量的起始值为1。