0
我有一個信號量,我試圖改變它的值,並失敗。在閱讀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
它工作得很好很奇怪我不知道感謝所有的答覆雖然
是否有你想要/需要的SysV信號燈理由嗎? POSIX信號量通常要好得多(更加安全的API,因爲它們可以在用戶空間中實現,所以速度要快得多),但功能並不那麼強大,並且可能不適用於真正舊的系統。 – 2012-03-03 02:02:27
何時以及如何設置'semId'? – alk 2012-03-03 09:09:36