OS 信号量 经典进程同步问题

在这里插入图片描述
处理进程间互斥问题时:
在这里插入图片描述
处理进程间同步问题时:
在这里插入图片描述
经典进程同步问题
在这里插入图片描述
在这里插入图片描述
(实现互斥的 P 操作必须放在实现同步的 P 操作之后,否则会造成死锁,退出区的两个 V 操作可以互换)
死锁:各个进程互相等待对方手里的资源,导致各个进程都阻塞,无法向前推进的现象。(对不可剥夺资源的不合理分配,可能导致死锁)
在这里插入图片描述
当缓冲区存满K件产品时。生产者又生产了一件产品,它欲向缓冲器存放时将在empty上等待,但它已经占有了使用缓冲器的权利。这时消费者要取产品时将停留在mutex上得不到使用缓冲器的权利,导致生产者等待消费者取走产品,而消费者却在等待生产者释放使用缓冲器的权利,这种相互等待永远结束不了。因此进程将会发生死锁。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
当五个哲学家同时去取他左边的筷子,每人拿到一只筷子且不释放,即五个哲学家只得无限等待下去,引起死锁。
解决办法:
在这里插入图片描述
没有死锁:https://blog.csdn.net/Yun_Ge/article/details/89177918

在这里插入图片描述
理发师和顾客是同步关系,理发师等待顾客来,然后为顾客服务,顾客来了之后叫醒理发师,执行上是有先后顺序的,所以应该有两个同步信号量,且散在两个进程里;另一方面,顾客对椅子的操作又是互斥的,属于竞争关系,所以需要互斥信号量来保证椅子的数量准确。

在这里插入图片描述

总结一下:

互斥信号量控制访问临界资源。要注意临界资源到底指什么。在生产者-消费者问题中,是缓冲区中的每一个块;在读者-写者问题中是readcount这个变量;在睡眠理发师问题中是空椅子。要自己定义临界资源啊!

如果两个行为间有先后顺序就需要同步信号量了。比如生产-消费需要同步;有空的理发师-有等待的顾客 需要同步。

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

发布了36 篇原创文章 · 获赞 0 · 访问量 1754

猜你喜欢

转载自blog.csdn.net/Oneiro_qinyue/article/details/105010111