单例模式 远程桌面登陆 高阶函数 map遍历 wavedorm 父子元素 json linq symfony delphi mvvm scroll laravel4 rss jquery多个元素绑定同一个事件 ie内核浏览器怎么设置 python与机器学习 pip环境变量配置 jq入口函数 android入门实例 linuxmysql启动命令 destoon模板 python中的index python文件写入 python基础教程 python读取数据库 python怎么配置环境 python传参 java基础教程 java字符串 学java基础 java创建目录 java怎么输出数组 java方法的调用 java获取文件 java程序设计教程 乱码查看器 一键换系统 sql行转列 苹果手机老是自动重启
当前位置: 首页 > 学习教程  > 编程语言

操作系统——进程同步中的经典问题

2021/2/13 19:04:22 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

生产者-消费者问题 问题重述及方法 思考:能否改变相邻P,V操作的顺序呢? 多生产者-多消费者问题 如果去掉互斥量mutex,其实也是成立的。原本在于,该例题中的缓冲区大小为1,在任何时刻apple、orange、plate …

生产者-消费者问题

问题重述及方法

在这里插入图片描述

在这里插入图片描述

思考:能否改变相邻P,V操作的顺序呢?

在这里插入图片描述

多生产者-多消费者问题

在这里插入图片描述
在这里插入图片描述

如果去掉互斥量mutex,其实也是成立的。原本在于,该例题中的缓冲区大小为1,在任何时刻apple、orange、plate 三个同步信号量最多只能一个是1。最多只有一个进程的P操作不会被阻塞,并进去临界区。

如果缓冲区大于1的话,则必须蛇者mutex信号量。

吸烟者问题

在这里插入图片描述

在这里插入图片描述

读者-写者问题

读者优先

在这里插入图片描述

互斥关系:写进程一写进程、写进程―读进程。读进程与读进程不存在互斥问题。

写者进程和任何进程都互斥,设置一个互斥信号量rw,在写者访问共享文件前后分别执行P、V操作。

读者进程和写者进程也要互斥,因此读者访问共享文件前后也要对rw执行P、V操作。

核心问题:如果所有读者进程在访问共享文件之前都执行P(rw)操作,那么会导致各个读进程之间也无法同时访问文件。

P(rw)和V(rw)其实就是对共享文件的加锁和解锁。既然各个读进程需要同时访问,而读进程与写进程又必须互斥访问,那么我们可以让第一个访问文件的读进程加锁,让最后一个访问完文件的读进程解锁。可以设置一个整数变量count来记录当前有几个读进程在访问文件。

在这里插入图片描述

写者优先

在这里插入图片描述
读者1—>读者2:两个读者在读取文件之前经历过完整的PV操作,故不影响。

写者1—>写者2:有w信号量互斥。

写者1—>读者1:与上相同,写者不完成写文件释放w信号量,则读者会一直阻塞。

哲学者进餐问题

在这里插入图片描述

在这里插入图片描述

如何防止死锁?

  • 可以对哲学家进程施加一些限制条件,比如最多允许四个哲学家同时进餐。这样可以保证至少有一个哲学家是可以拿到左右两只筷子的。
  • 要求奇数号哲学家先拿左边的筷子,然后再拿右边的筷子,而偶数号哲学家刚好相反。

在这里插入图片描述
各哲学家拿筷子这件事必须互斥的执行。这就保证了即使一个哲学家在拿筷子拿到一半时被阻塞,也不会有别的哲学家会继续尝试拿筷子。这样的话,当前正在吃饭的哲学家放下筷子后,被阻塞的哲学家就可以获得等待的筷子了。


本文链接: http://www.dtmao.cc/news_show_700270.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?