为什么这个信号量卡住了

时间:2019-09-11 00:14:23

标签: c semaphore

我制作执行该代码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;

1 个答案:

答案 0 :(得分:0)

您应使用此按钮创建信号量

sem_open(SEM_NAME, O_RDWR,0777, 1);

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