У меня есть семафор, который я пытался изменить, и он не работает. Прочитав страницу man
, я узнал, что если значение меньше 0 и вы используете SETVAL
, оно не будет выполнено (я его не инициализировал). Но когда я инициализирую его, я получаю «идентификатор удален», когда я звоню perror()
. Я не уверен, имеет ли это в виду SETALL
или союз.
Моя инициализация выглядит так:
union semun argument;
unsigned short values[1];
values[0] = 1;
argument.array = values;
int retVal;
//INITIALIZE our semaphore
if(retVal = semctl(semId, 0, SETALL, argument) == -1)
{
perror("semaphore INITIALIZATION failed\n");
exit(1);
}
Мой профсоюз объявлен так же, как справочная страница, и некоторые другие веб-сайты делают это, и после semget()
у меня есть проверка, чтобы убедиться, что он возвращает семафор, поэтому я знаю, что часть работает правильно. Если бы кто-нибудь мог сказать мне, где я иду не так, я был бы очень признателен.
Также, если кто-нибудь мог бы объяснить причину моей ошибки, чтобы я мог извлечь урок из своей ошибки, которая была бы наиболее полезной.
Спасибо
ОБНОВЛЕНИЕ: очевидно, ему не понравился == -1
, поэтому я изменил его на < 0
, и он работал нормально, очень странно. Не знаю, спасибо за все ответы