Я использую 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.