【操作系统】Classical Problems of Synchronization-信号量机制

1 哲学家问题

在这里插入图片描述
每个人都要拿起左右两根筷子,才能就餐。
算法描述:
在这里插入图片描述
筷子可以当作临界资源,我们对它进行PV操作。
每次拿起两根筷子,是两次P操作,-》eat,放下两根筷子是两次V操作。
可能产生的问题解决:
在这里插入图片描述
若是五个哲学家同时拿左边筷子,他们下一步都要拿右边的筷子,会造成死锁。
而通过上面三种方案,能保证至少一个哲学家可以就餐。

2 生产者-消费者问题

2.1 有限的共享缓冲区数据

在这里插入图片描述
共享就要同步,同时只有一个人(P or C)能访问缓冲区-互斥。

2.2 算法解决

在这里插入图片描述
有这样三个信号量。
在这里插入图片描述
先判断P(empty)代表生产一个,再判断P(mutex)是否有人在访问。
在这里插入图片描述
对于上述问题,我们先判断缓冲区数量也就是同步,再判断是否有人访问就是互斥。
满足对前后相连的两个不同P,同步P操作再互斥P操作前。

3 读写问题

3.1 概述

在这里插入图片描述
读和读无互斥。
写和写互斥很简单。
我们下面讨论读者-写者问题。

3.2 伪码描述

在这里插入图片描述
在这里插入图片描述
Rmutex是对Rcount进行保护,保证只有一个访问这个共享变量。
如果Rcount==0,就代表是进入的第一个读者,此时读者可以继续读(不进行P(wmutex)),那么其他写者必须等待,等到count–==0时,读者进行n次V操作,此时写者才可以继续写。

发布了915 篇原创文章 · 获赞 250 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/weixin_43838785/article/details/105223663