3 回答

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

TA貢獻1833條經(jīng)驗 獲得超4個贊
此方法是保證讀者優(yōu)先的方法,如果不設(shè)信號量,那么在V之后無法保證先行讀者阻塞隊列。也可能直接喚醒寫者阻塞隊列。設(shè)互斥信號量的目的是保證讀者有序先行。

TA貢獻1820條經(jīng)驗 獲得超2個贊
這是操作系統(tǒng)里面的讀者寫者問題寫下偽代碼:intreadcount=0;//讀進程計數(shù)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中,實現(xiàn)進程同步互斥可以使用mutex、event、semaphore等內(nèi)核對象隱約記得些Win32API
- 3 回答
- 0 關(guān)注
- 123 瀏覽
添加回答
舉報