顧客銀行辦理業務時,首先在取號機上取號,然後坐在椅子上等候業務員叫號時前往視窗辦理業務,假設銀行現在有3個視窗可辦理業務,請採用訊號量和PV操作描述顧取號等候叫號和銀行業務員叫號辦理業務的同步操作。
阿新 • • 發佈:2018-12-17
顧客銀行辦理業務時,首先在取號機上取號,然後坐在椅子上等候業務員叫號時前往視窗辦理業務,假設銀行現在有3個視窗可辦理業務,請採用訊號量和PV操作描述顧取號等候叫號和銀行業務員叫號辦理業務的同步操作。
1)首先識別哪些事務可以作為程序
顧客,業務員
2)其次識別臨界資源,即程序共享的事務
取號機,椅子,顧客,業務員
3)定義資料結構
定義共享變數及私有變數
int number=0;//顧客計數器
定義代表臨界資源的訊號量
Semaphore getNum=1;//互斥改變顧客序號number
4)定義程序操作
4.1顧客操作程序:
顧客進入銀行
取號機取號
顧客數增1
業務員叫號
辦理業務
顧客數減1
4.2業務員程序操作
呼叫一位顧客
辦理業務
5)程序的虛擬碼實現
int Number=0;//顧客計數器
semaphore getNum=1;//互斥改變顧客序Number
semaphore customers=0;//顧客數訊號量
semaphore callMe=0; //等待叫號的顧客數訊號量
/*顧客程序的實現*/
Process customer()
{
到來;
P(getNum);//互斥取號
Number++;//取號
V(getNum);
V(customers);/顧客數加1
P(callMe);//等待叫號
辦理業務;
P(getNum);//顧客數減1
Number--;
V(getNum);
離開;
}
/*業務員程序實現*/
Process worker()
{
While(1)
{
P(customers);//取一個顧客號
V(callMe);//叫號
辦理業務;
}
}
拓展問題:顧客銀行辦理業務時,首先在取號機上取號,然後坐在椅子上等候業務員叫號時前往視窗辦理業務,如果等待時間超過1小時,則顧客離開.椅子有20把,如果沒有空椅子,則顧客站立,如果站立等待超過30分鐘,則顧客離開,等待假設銀行現在有3個視窗可辦理業務,請採用訊號量和PV操作描述顧取號等候叫號和銀行業務員叫號辦理業務的同步操作。