使用執行緒模擬解決銀行排隊叫號問題

yrhzmu發表於2020-12-08

使用執行緒模擬解決銀行排隊叫號問題。

在銀行中有一個叫號機,有一個10個座位的長椅,客戶在叫號後如果無人在櫃檯前服務,就會去要求服務;如果櫃檯忙,則會找長椅入座;如果長椅滿則會離開。
要求顯示輸出叫號過程,分析程式執行狀況,並對程式作出評估。

程式思想

定義兩個訊號量chair,call。使用sem_init()初始化訊號量,分別賦值為11和2,因為使用sem_wait()時,值為-1就開始阻塞不能訪問共享資源叫號服務和座位,call賦初值為2,可以實現一個執行緒訪問另一個執行緒執行sem_wait()函式時,可以訪問共享資源不會阻塞,這樣就可以實現一個執行緒被服務,其餘執行緒也可以接受臨界區資源的服務而不被阻塞。同樣chair訊號量也是這個原理。因為執行緒的建立和訪問時隨機的,訊號量的等待和釋放也是在短時間內完成的,所以使用sleep函式來實現,模擬被服務的時間和在座位上等待的時間。同時在櫃檯空閒時,座位上的客戶可以到櫃檯上接受服務。本實驗程式碼提前設定了15個客戶,在體驗方面與真實的的銀行服務有差別,因為執行緒的建立和登出都是瞬時的,只要執行緒數量足夠多,實現結果越接近真實的銀行服務。

#include<stdio.h>
#incl

相關文章