Семафор приобретается только одним процессом - PullRequest
1 голос
/ 09 мая 2019

Я пытаюсь реорганизовать мой код на C для стандарта POSIX.Видимо, я зашел в тупик, что сводится к этому простому коду.Семафор должен быть разделен между двумя процессами, но, к сожалению, он принадлежит процессу, который его создал.

creator

sem_t * mutex;

  if ((mutex = sem_open (key_trucker, O_CREAT, 0644, 1)) == SEM_FAILED) {
       perror ("sem_open"); exit (1);
    }

    int val;
    sem_getvalue(mutex,&val);

    if(val == 0 ){
      sem_post(mutex);
    }

  time_t currtime;
  while(1){
    sem_wait(mutex);
    time(&currtime);
    sleep(1);
    printf("%s",ctime(&currtime) );
    sem_post(mutex);
  }

процесс, который разделяет семафор

sem_t * mutex;

  if ((mutex = sem_open (key_trucker, 0 )) == SEM_FAILED) {
       perror ("sem_open"); exit (1);
        }

  time_t currtime;
  while(1){
    sem_wait(mutex);
    time(&currtime);
    printf("%s",ctime(&currtime) );
    sleep(1);
    sem_post(mutex);
  }

1 Ответ

0 голосов
/ 09 мая 2019

Семафор, который должен быть разделен между процессами, должен быть «именованным» семафором. Такое имя начинается с «\». Семафор также должен быть уничтожен, в конце концов, в противном случае во второй раз, когда процесс вызывает sem_open(), он завершится с ошибкой и установит для 'errno' значение EXIST (или аналогичное значение). Таким образом, коду также необходимо (после того, как будет замечен сбой вызова) проверить значение errno

...