作業系統PV操作題整理1

2021-10-01 08:26:37 字數 2299 閱讀 2751

1 餐廳分為等待區、用餐區、廚房。等待區中有n個椅子,顧客來了有位置則坐下,沒有就離開。廚房互斥使用,進入廚房後椅子後椅子空出來供顧客坐下。用餐處有m個位置,用完廚房看用餐處是否有空位,如果有空位則顧客從廚房出來並叫清潔員a清掃,沒有則坐在廚房等待。顧客到用餐處用餐後,通知清潔員b進行打掃。

#include

#include

typedef

int semaphore;

struct process

;typedef

struct

ss;voidp(

int*n)

voidv(

int*n)

void

student

(int

*kitchen,

int*seats,

int*desks,

int*cleaner_a,

int*cleaner_b)

}void

cleaner_a

(int

*cleaner_a,

int*kitchen)

}void

cleaner_b

(int

*cleaner_b,

int*desks)

}int

main()

2.訂票與查票,可多個查票,訂票者與查票者不可同時操作且按請求順序提供服務

#include

#include

typedef

int semaphore;

struct process

;typedef

struct

ss;voidp(

int*n)

voidv(

int*n)

void

order

(int

*w,int

*rw)

}void

check

(int

*w,int

*rw,

int*mutex,

int*count)

}int

main()

#include

#include

typedef

int semaphore;

struct process

;typedef

struct

ss;voidp(

int*n)

voidv(

int*n)

void

dad(

int*empty,

intint

*mutex)

}void

mom(

int*empty,

int*mutex,

int*orange)

}void

daughter

(int

int*orange,

int*empty,

int*mutex)

}int

main()

4.n個生產者程序和m個消費者程序共享大小為k的緩衝區,規則如下,程序之間互斥訪問緩衝區,對每條放入緩衝區的資料,所有消費者必須接受一次,緩衝區滿時,生產者必須阻塞,緩衝區空時,消費者必須阻塞。

#include

#include

#define m 10

#define k 5

typedef

int semaphore;

struct process

;typedef

struct

ss;voidp(

int*n)

voidv(

int*n)

void

producer

(int

*empty,

int*mutex,

int*full)

}void

consumer

(int

*mutex,

int*full,

int*empty)

}int

main()

; semaphore full[m]=;

producer

(empty,

&mutex,full)

;consumer

(&mutex,full,empty)

;return0;

}

作業系統 PV操作題 銀行存款問題

在作業系統中,程序的同步和互斥是我們程序管理的重點和難點。不僅是本科學習階段的重點,同時在歷年研究生入學考試 408和自主命題 中,用pv操作來實現程序同步和互斥,也經常是一道大題。今天跟大家帶來的是一道常規的pv操作 銀行存款問題,其實這道題和理髮師的思路非常相似。本篇文章跟大家提供兩種解題思路。...

作業系統 PV操作

1.pv原語的含義 p操作和v操作是不可中斷的程式段,稱為原語。pv原語及訊號量的概念都是由荷蘭科學家e.w.dijkstra提出的,其基本思路是用一種新的變數型別 semaphore 來記錄當前可用資源的數量。訊號量sem是一整數,sem大於等於零時代表可供併發程序使用的資源實體數,但sem小於零...

作業系統 PV操作

分析 進入書店p sn 與離開書店v sn 操作對應題目中的 該書店最多允許n個購書者進入 因為假如進入書店的人數超過了最大的限制,p操作會被阻塞,知道v操作執行後釋放空間。接下來分析購書與收費的流程,現實生活中購書付款是顧客提出繳費的要求後,收銀員才能進行收費。所以收銀員預設是處於待機狀態即阻塞狀...