欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

桌上有一只盘子,每次只能放入一个水果。请用Wait()、Signal()原语实现爸爸、儿子、女儿三个并发进程的同步。

发布时间:2023/12/20 编程问答 53 豆豆
生活随笔 收集整理的这篇文章主要介绍了 桌上有一只盘子,每次只能放入一个水果。请用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()原语实现爸爸、儿子、女儿三个并发进程的同步。的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。