作業系統中的經典同步問題

2021-10-08 08:29:23 字數 1521 閱讀 8532

semaphore full=0;

//滿衝存數目

semaphore empty=n;

//空衝存數目

semaphore mutex=1;

//對有界緩衝

producer()

}consumer()

}

其中p(full)/p(empty)與p(mutex)的順序不能顛倒,必須先對資源訊號量進行p操作,再對互斥訊號量進行p操作,否則會導致死鎖。

p操作(wait操作)相當於此類資源數量-1;v操作(signal操作)相當於此類資源數+1

理髮椅、等待椅子、顧客看做不同的量

int waiting=0;

//顧客數量

semaphore mutex=1;

//用於互斥操作waiting

semaphore bchair=1;

//理髮椅的訊號量

semaphore wchair=n;

//等待座椅的訊號量

semaphore ready=finish=0;

//理髮師與顧客的同步訊號量

barber()

//理髮師程序

}customer()

//顧客程序

else

p(wchair)

;//占用等待座椅

p(bchair)

;//占用理髮座椅

v(wchair)

;//離開等待座椅

v(ready)

;//離開等待位置去理髮

p(finish)

;//占用理髮師

v(bchair)

;//理髮結束離開理髮椅

p(mutex)

;//占用使用waiting變數許可權

waiting--;v

(mutex)

;}

顧客、凳子、理髮椅統一為乙個變數

int chairs=n+1;

//凳子和理髮椅

semaphore ready=0;

//等待理髮顧客數量

semaphore finish=1;

//理髮師狀態

semaphore mutex=1;

//互斥訊號量

barber()

}customer()

else

v(mutex)

;//直接離開

}

(哲學家按照編號逆時針圍桌而坐,0號哲學家左手筷子為0號筷子,右手筷子為1號筷子,依次類推)

為了避免死鎖,規定奇數號的哲學家先拿起左邊筷子,然後拿起右邊筷子;偶數號的哲學家則相反

semaphero fork[5]

=;//五根筷子訊號量初值都為1

philosopher

(int i)

//i=1,2,3,4,5

else

}}

作業系統經典同步問題

經典同步問題 一 生產者 消費者問題 分析 1 無論生產者 消費者使用緩衝池時應保證互斥使用 互斥訊號量mutex 2 生產者和消費者間交叉有序 a.有序的控制最根源在產品數量上。b.設定兩個訊號量 分別針對生產者 消費者設定不同的訊號量,empty和full分別表示緩衝池中空緩衝池和滿緩衝池 即產...

作業系統 程序同步經典問題

問題描述 使用乙個緩衝區來儲存物品,只有緩衝區沒有滿,生產者才可以放入物品 只有緩衝區不為空,消費者才可以拿走物品。因為緩衝區屬於臨界資源,因此需要使用乙個互斥量 mutex 來控制對緩衝區的互斥訪問。為了同步生產者和消費者的行為,需要記錄緩衝區中物品的數量。數量可以使用訊號量來進行統計,這裡需要使...

作業系統 程序管理之經典同步問題

生產消費者模型 多生產者多消費者模型 單生產者多消費者模型 哲學家進餐 p 程序需向互斥緩衝區進行寫操作,而c 程序從互斥緩衝區進行取操作。分析 p和c互斥訪問同一臨界資源,需設定mutex 1 p和c相互同步,p提供產品給c,而c提供空間給p semaphore mutex 1,empty n,p...