桌上有一只盘子,每次只能放入一个水果。请用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的三维重建算法学习笔记(一)—
- 下一篇: 当兵的目标和计划_新兵下连时,一定要弄明