1. 程式人生 > >The Little Book of Semaphores 訊號量小書 第五章 稍欠經典的同步問題 5.3 先進先出理髮店

The Little Book of Semaphores 訊號量小書 第五章 稍欠經典的同步問題 5.3 先進先出理髮店

第五章 稍欠經典的同步問題

5.3 先進先出理髮店

在上一個解決方案中,無法保證顧客按照他們到達的順序獲得服務。 最多有n個顧客可以通過旋轉柵門,發出customer訊號,並等待barber訊號。 當理髮師發出barber訊號時。任何顧客都可能繼續。

修改此解決方案,以便按照他們通過旋轉柵門的順序提供服務。

提示:您可以將當前執行緒稱為self,因此如果您編寫self.sem = Semaphore(0),則每個執行緒都會獲得自己的訊號量。

5.3.1 先進先出理髮店提示

我的解決方案使用了名為queue的訊號量列表。

當每個執行緒通過旋轉門時,它會建立一個執行緒並將其放入佇列中。

每個執行緒都在等待自己的訊號量,而不是等待barber。 當理髮師醒來時,他從佇列queue中移除一個執行緒併發出訊號。

5.3.1 先進先出理髮店方案

以下是修改後的顧客程式碼:

理髮師的程式碼:

請注意,理髮師必須獲取互斥鎖才能訪問佇列。 此解決方案位於sync_code / barber2.py中(參見3.2)。