題目描述:
現有乙個小巷,除安全島可容2人暫時停身外,僅能容一人通過。a,b兩頭都允許行人進出,試用訊號量和pv操作設計乙個演算法,讓兩頭的行人順利通過小巷。
解題模型:
sem_t a_s;//程式原始碼:a-s路段
sem_t b_s;//
b-s路段
sem_t island;//
島 sem_t a;//
對a頭的人數進行唯一操作
sem_t b;//
對b頭人數進行唯一操作
sem_t is;//
對island島上的人進行唯一操作
void*a()
v(a);
//a-people操作完成,解鎖
v(a-s); //
釋放 a-s路段 資源
p(b-s); //
請求踏上 b-s路段 ,上鎖
v(island); //
當a過來的人踏上 b-s路段,則釋放island資源,保證資源最大化
;v(b-s); //
解鎖 } }
void*b()
v(b);
//b-people操作完成,解鎖
v(b-s);//
釋放 b-s路段 資源
p(a-s);//
請求踏上 a-s路段 ,上鎖
v(island); //
當b過來的人踏上 a-s路段,則釋放island資源,保證資源最大化
;v(a-s); //
解鎖 }
}
#include #include#include
#include
#include
#include
#define p sem_wait
#define v sem_post
#define a_s &a_s_road
#define b_s &b_s_road
#define island &ab_island
#define a &a_peo
#define b &b_peo sem_t a_s_road;
//臨界資源:a-s路段
sem_t b_s_road;//
臨界資源:b-s路段
sem_t ab_island;//
島 初值為2
sem_t a_peo;//
對a頭的人數進行唯一操作
sem_t b_peo;//
對b頭人數進行唯一操作
int a_people=5;//
a頭的人數
int b_people=5;//
b頭的人數
int island_people=0;//
記錄島上的人數
void* process_a(void *p)
}void* process_b(void *p)
}int
main()
作業系統 PV操作
1.pv原語的含義 p操作和v操作是不可中斷的程式段,稱為原語。pv原語及訊號量的概念都是由荷蘭科學家e.w.dijkstra提出的,其基本思路是用一種新的變數型別 semaphore 來記錄當前可用資源的數量。訊號量sem是一整數,sem大於等於零時代表可供併發程序使用的資源實體數,但sem小於零...
作業系統 PV操作
分析 進入書店p sn 與離開書店v sn 操作對應題目中的 該書店最多允許n個購書者進入 因為假如進入書店的人數超過了最大的限制,p操作會被阻塞,知道v操作執行後釋放空間。接下來分析購書與收費的流程,現實生活中購書付款是顧客提出繳費的要求後,收銀員才能進行收費。所以收銀員預設是處於待機狀態即阻塞狀...
作業系統大作業 程序間通訊
目的 了解程序間通訊的機制,實現程序的兩種通訊方式,多次執行,觀察結果,並對兩種通訊方式進行比較。內容 利用系統提供的通訊系統呼叫,進行一種方式的程序通訊的程式設計,並對結果進行分析,同時了解另一種通訊方式,將兩種方式進行比較分析。1 訊息的建立傳送和接收 使用系統呼叫msgget msgsnd m...