作業系統 PV大作業

2022-06-23 16:39:34 字數 1679 閱讀 2379

題目描述:

現有乙個小巷,除安全島可容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...