哲學家進餐:
哲學家問題可出現(xiàn)拿起左邊的筷子,然后拿起右邊的筷子進餐,但是假如五個哲學家同時拿起左邊的筷子,那么右邊的筷子都取不到
你可能這樣思考就是就是你拿起左邊的筷子,查看右邊的筷子是否可用,如果不可用,等一會在重復上述問題,但是可能在某一瞬間,所有哲學家都拿起左邊的筷子,然后發(fā)現(xiàn)沒有右邊的筷子,同時又放下左邊的筷子,這樣重復下去,這種情況成為饑餓
解決上述方法可以使用一個二進制信號量,這里面有一個性能問題,就是采用信號量同一時間只有一個哲學家就餐,但是實際上可以允許倆個哲學家就餐
這里面涉及倆個信號量一個臨界區(qū)信號量,代表著同一時刻只有一個哲學家,另一個信號量是哲學家信號量如果一個哲學家準備就餐,那么down該信號量,如果倆個叉子都可用,那么會吃面,然后放下叉子,如果獲取不到叉子那么就會,就會把他的哲學家信號量down然后阻塞還哲學家,就是他不能就餐然后必須等別人放下叉子之后就可以了
讀-寫者問題:
它為數(shù)據(jù)庫訪問建立了一個模型
有一種解法就是,第一個讀者對該信號量執(zhí)行一個down操作,隨后讀者只是遞增一個計數(shù)器rc,然后讀者離開時,遞減這個計數(shù)器。但是這里面有一個問題,由于寫操作是排他的,所以寫操作到來時,只要有讀操作那么,寫操作永遠都不會被執(zhí)行,寫操作后面的讀操作都被允許訪問數(shù)據(jù)庫。提供了一種解法就是如果寫操作到來那么后面的讀操作都會被阻塞,寫操作前的讀操作結(jié)束之后寫操作就會被執(zhí)行
理發(fā)師睡覺問題
這個問題的原型是一個理發(fā)椅,多個顧客等待椅,一個理發(fā)師,如果沒有客人那么理發(fā)師睡覺,第一個客人來到了,那么它獲得信號量,其他客人只能等第一個客人釋放信號量,他才能繼續(xù)剪頭,如果等待剪頭的椅子滿了的話,顧客就離開了,等待顧客也是獲得該信號量,只不過阻塞在該信號量上,有顧客來就把up顧客的信號量,顧客釋放了信號量,理發(fā)師先獲得信號量,整理之后才能剪頭,然后顧客才能獲得該信號量