桌上有一只盘子,每次只能放入一个水果。请用Wait()、Signal()原语实现爸爸、儿子、女儿三个并发进程的同步。
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                桌上有一只盘子,每次只能放入一个水果。请用Wait()、Signal()原语实现爸爸、儿子、女儿三个并发进程的同步。
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                1、桌上有一只盤子,每次只能放入一個水果。爸爸專向盤中放蘋果,媽媽專向盤中放桔子,一個女兒專等吃盤中的蘋果,一個兒子專等吃盤中的桔子。試用P,V操作寫出他們(4個并發進程)能同步的程序。
semaphore plate=1,apple=0, orange=0; father() {//這是父親進程while(1) {P (plate) ;//互斥的向盤中取、放水果put an apple;//向盤中放蘋果V(apple) ;//允許取蘋果} }mother() {//這是母親進程while(1) {P (plate);//互斥向盤中取、放水果put an orange;//向盤子中放橘子V (orange) ;//允許取橘子} }son() {//這是兒子進程while(1) {P (orange);//互斥向盤中取橘子eat an orange;V (plate) ;//允許向盤在中取、放水果} }daughter() {//女兒進程while(1) {P (apple) ;//互斥的向盤中取蘋果eat the apple;V(plate) ;//運行向盤子中取、放水果} } void main(){cobeginfather();mother();son();daughter();coend }2、桌上有1空盤,最多允許存放1個水果。爸爸可以向盤中放蘋果,也可以向盤中放桔子。兒子專等吃盤中的桔子,女兒專等吃盤中的蘋果。規定當盤空時一次只能放1個水果供吃者取用。請用Wait()、Signal()原語實現爸爸、兒子、女兒三個并發進程的同步。
semaphore empty=1,mutex=1,apple=0,orange=0; //為四個信號量賦初值 void father(){while(TRUE){wait(empty); //等待盤子為空wait(mutex); //等待獲取對盤子的操作爸爸向盤中放一個蘋果或者桔子;signal(mutex); //釋放對盤子的操作 //不能夠直接拿apple或者orange來進行判斷,因為semaphore變量不能夠用來判斷if(put_in_apple){//注意,這里是新的變量并且不能是semaphore類型的變量signal(apple); //通知女兒可以來盤子中取蘋果}else{signal(orange);// 通知兒子來取桔子}} } void son(){ while(TRUE){wait(orange); //判斷盤子中是否有桔子wait(mutex); //等待獲取對盤子的操作get an orange; //兒子獲得一個橘子signal(mutex); //釋放對盤子的操作signal(empty); //盤子空了,可以繼續放水果了} } void daugther(){ //與兒子進程相似while(TRUE){wait(apple);wait(mutex);get an apple;//女兒獲得一個蘋果signal(mutex);signal(empty);} } void main() { cobeginfather();son();daugther();coend }操作系統前邊的這些還是相對比較基礎和重要的,所以建議大家一定要把前邊的基礎打牢固,多進行相對題目的練習,這樣才能更好地進行后邊知識點的學習。
總結
以上是生活随笔為你收集整理的桌上有一只盘子,每次只能放入一个水果。请用Wait()、Signal()原语实现爸爸、儿子、女儿三个并发进程的同步。的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 基于MVS的三维重建算法学习笔记(一)—
 - 下一篇: Windows 10 封装普通EXE为系