Семафоры POSIX не инициализируются и процесс прерывается при попытке отправить на семафор: средство futex вернуло неожиданный код ошибки - PullRequest
2 голосов
/ 27 октября 2019

Я использую 2 семафора POSIX, чтобы сигнализировать между процессами, когда чтение и запись в общую память в порядке. Однако, когда я пытаюсь опубликовать или подождать на семафоре, я получаю следующую ошибку:

The futex facility returned an unexpected error code.

Я считаю, что это означает, что я неправильно инициализирую семафор, или у меня есть какая-то ошибка синхронизации.

В моем проекте любой процесс (P1 или P2) может создать семафор, в зависимости от того, какой код выполняется первым. Оба используют одинаковые способы открытия семафоров чтения и записи.

sem_t *readsem = NULL;
sem_t *writesem = NULL;

if ((readsem = sem_open("/readsem", O_CREAT, 0777, 0)) == SEM_FAILED) {
    exit(EXIT_FAILURE);
}
if ((writesem = sem_open("/writesem", O_CREAT, 0777, 0)) == SEM_FAILED) {
    exit(EXIT_FAILURE);
}

Когда я хочу опубликовать или прочитать, я просто использую API:

sem_post(readsem);
sem_wait(writesem);

Когда я пытался отладитьиспользуя sem_getvalue (readsem) для проверки значения, значение не равно 0 или 1, как ожидалось. Вместо этого кажется, что это просто значение ненужной памяти 2057840963. Я попытался написать, как работает моя синхронизация, но я все еще не уверен, в чем проблема, ни как отлаживать семафоры или ошибку futex.

...