У меня есть семафор, значение которого я пытался изменить, и это не удалось. Прочитав страницу 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
, и он работал нормально, очень странно, я не знаю, спасибо за все ответы, хотя
semId
? - person alk   schedule 03.03.2012