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

生产者-消费者问题

问题重述及方法

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

多生产者-多消费者问题

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

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

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

吸烟者问题

在这里插入图片描述

在这里插入图片描述

读者-写者问题

读者优先

在这里插入图片描述

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

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

扫描二维码关注公众号,回复: 12572994 查看本文章

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

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

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

在这里插入图片描述

写者优先

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

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

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

哲学者进餐问题

在这里插入图片描述

在这里插入图片描述

如何防止死锁?

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

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

猜你喜欢

转载自blog.csdn.net/weixin_45605341/article/details/113487826
今日推荐