3 回答

TA貢獻1936條經驗 獲得超7個贊
可能會發生錯誤。比如:
1.第一個讀者進入后(此時count==0),p了一下rw。
2.與此同時另一個讀者也進入了,而此時count 尚未更新,仍為0,因此第二個讀者也認為自己是第一個進來的,也去p了rw,但是rw已經被第一個讀者p過了,因此這個讀者會被一直阻塞,直到最后一個讀者離開,釋放了rw后才能被喚醒。若有后續讀者在count更新前進來,那么這些讀者同樣會被阻塞。
而若設置了mutex互斥信號量,第二個讀者只有在count更新后才能進來,就不會發生上述錯誤。

TA貢獻1820條經驗 獲得超2個贊
這是操作系統里面的讀者寫者問題寫下偽代碼:intreadcount=0;//讀進程計數semaphorewriteblock=1;semaphoremutex=1;cobeginprocessreader_i(){P(mutex);readcount++;if(readcount==1)P(writeblock);//封鎖寫者進程V(mutex);{讀資源A};P(mutex);readcount--;if(readcount==0)V(writecount);V(mutex);}processwriter(){P(writeblock);{寫資源A};V(writeblock);}在Windows中,實現進程同步互斥可以使用mutex、event、semaphore等內核對象隱約記得些Win32API
- 3 回答
- 0 關注
- 128 瀏覽
添加回答
舉報