当前位置:   article > 正文

TYUT太原理工大学2022操作系统大题之PV操作_cobegin和coend用法

cobegin和coend用法

题型一:PV操作

前言:该题题目中会给出我们一个任务(通常可以分几步完成,每一步为一个进程),要求我们用PV操作实现该任务的同步问题,类似于这样:

0ffe2de916c64b81a373eb60d11617f4.png

首先让我们用一个简单的例子(生产者-消费者问题)来理解PV操作:

一个生产者,一个消费者,公用一个缓冲区:

该任务可分为两个部分(也就是两个进程):进程1——生产者生产一个产品放入缓冲区;

进程2——消费者从缓冲区拿走产品进行消费。我们就是要用PV操作实现进程1、2的同步。

让我们来看一下完整的代码一:

  1. begin //begin-end相当于{-}
  2. semaphore s1=1; //表示缓冲区是否为空,初值为1
  3. semaphore s2=0; //表示缓冲区中是否为满,初值为0
  4. cobegin //cobegin与coend作用是确保P生产(进程)与P消费(进程)同步进行
  5. process P生产 //用process定义进程
  6. begin
  7. Ls: //Ls意味L生产,下文还有Lx表示L消费
  8. 生产一个产品; //此处中文必须写,用来解释pv操作
  9. p(s1); //s1=s1-1=0,意味着放入了产品使缓冲区不为空
  10. 产品送往缓冲区; //此处中文必须写,用来解释pv操作
  11. v(s2); //s2=s2+1=1,意味着取出了产品使缓冲区为空
  12. goto Ls; //Ls和goto Ls并用相当与while(true){ },使用它是为了确保p、v两个操作成对存在,避免发生中断
  13. end
  14. process P消费
  15. begin
  16. Lx:
  17. 从缓冲区取出一个产品;
  18. p(s2);
  19. 消费该产品;
  20. v(s1);
  21. goto Lx;
  22. end
  23. coend
  24. end

我们还可以用代码二来代替代码一,如下:

  1. semaphore s1=1;
  2. semaphore s2=0;
  3. main()
  4. {
  5. cobegin
  6. shengchan();
  7. xiaofei();
  8. coend
  9. }
  10. shengchan()
  11. {
  12. while(true){ //while(true){ },使用它是为了确保p、v两个操作成对存在,避免发生中断
  13. 生产一个产品; //此处中文必须写,用来解释pv操作
  14. p(s1); //s1=s1-1=0,意味着放入了产品使缓冲区不为空
  15. 产品送往缓冲区; //此处中文必须写,用来解释pv操作
  16. v(s2);
  17. }
  18. }
  19. xiaofei()
  20. {
  21. while(true){
  22. 从缓冲区取出一个产品;
  23. p(s2);
  24. 消费该产品;
  25. v(s1);
  26. }
  27. }

考试时我们用代码一。

有了“生产者-消费者”的铺垫我们来看一下文章最开始的3道例题,加深理解

桌子上有一只盘子,每次只能放入一个水果。爸爸专向盘中放苹果,妈妈专向盘中放橘子,女儿专吃盘中的苹果,儿子专吃盘中的橘子。试用PV操作实现父、母、儿、女进程的同步。

  1. begin
  2. semaphore S1=1//(盘中是否为空)
  3. semaphore S2=0; //(盘中是否有苹果)
  4. semaphore S3=0; //(盘中是否有橘子)
  5. cobegin
  6.  process P父
  7. begin
  8. Lf:
  9. 取一个苹果;
  10. P(S1);
  11. 放入苹果;
  12.   V(S2);
  13. goto Lf;
  14. end
  15. process P母
  16. begin
  17. Lm:
  18. 取一个橘子;
  19. P(S1);
  20. 放入橘子;
  21. V(S3);
  22. goto Lm;
  23. end
  24. process P儿
  25. begin
  26. Ls:
  27. P(S3);
  28. 从盘中取橘子;
  29. V(S1);
  30. 吃橘子;
  31. goto Ls;
  32. end
  33. process P女
  34. begin
  35. Ld:
  36. P(S2);
  37.   从盘中取苹果;
  38. V(S1);
  39. 吃苹果;
  40. goto Ld;
  41. end
  42. coend
  43. end

2eefac9aec744ef2a8ace011a8214756.png

 320522c0f62e429cb10a94e577fcabee.png

 软件2019届真题:

91a4c01c22e34f60853b5da18cbfc8d3.png

 谢谢“碧桃和露”5月22号打赏给我的8毛钱

谢谢“qq_52937762”5月23号打赏给我的1.6元

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/661514
推荐阅读
相关标签
  

闽ICP备14008679号