我正在處理一個我們必須使用信號量來解決的問題。我有一個數組,其中包含兩個信號燈gsem
,並且給定某些條件請求sem_wait(&(gsem[me]))
,它應該等待,直到該特定進程被喚醒。但是,由於某種原因,它給了我錯誤Bad file descriptor
。我擡頭看看sem_wait
和Open Group規範說這不是錯誤sem_wait
可能導致。這讓我的整個程序變得瘋狂,我不知道爲什麼這是失敗的。C信號量:sem_wait引發莫名其妙的錯誤
編輯:違規代碼,根據要求。
120 sem_wait(&mutex);
121 if (inside[opp] > 0 || waiting[opp] > 0) {
122 sem_wait(&screen);
123 printf("%s %u waiting\n", names[me], t);
124 sem_post(&screen);
125 waiting[me]++;
126 sem_post(&mutex);
127 int hg = sem_wait(&(gsem[me]));
128 if (hg < 0)
129 printf("%s\n", strerror(errno));
130 }
我應該注意到這是一項家庭作業,我們需要使用信號量。教授稱之爲「男女通用衛生間」。男人和女人都可以使用它,但不能同時使用。 inside[opp]
是浴室中異性的人數。 waiting[opp]
是等待使用它的異性的數量。 screen
是鎖定訪問stdout
的信號量。該解決方案基於對我們的教科書中提供的讀者/作者問題的解決方案,該解決方案使用傳遞接力棒。
我也應該注意到,我們首先必須代碼阿達的解決方案,然後將其轉換爲C.我的Ada解決方案的工作,我把它翻譯逐字。我相信這是一些小的語法細節。最後,我正在研究Snow Leopard,如果有幫助的話。
顯示:-)好了,還是有問題的代碼的最小版本的代碼。 – paxdiablo 2010-05-02 01:27:45
請顯示您的代碼,並列出您定位的平臺/操作系統。另外,爲什麼不使用互斥鎖?信號量是不一樣快或那樣強勁,根據操作系統/執行 – 2010-05-02 01:27:45
山姆,互斥是短期的互斥_semaphore_,一類特殊信號在資源限制爲1。而且,即使OP使用其他的信號量,這可能是因爲我引用了「我們必須使用信號量」。 :-) – paxdiablo 2010-05-02 01:32:49