进程同步问题
本文最后更新于:2 months ago
进程同步问题
设自行车生产线上有一个箱子,其中有N个位置(N≥3),每个位置可存放一个车架或者一个车轮,设有3名工人,其活动分别为:
工人1活动:
1 |
|
要求分别用信号量PV操作实现三名工人的合作,要求解中不含死锁。
算是比较经典的进程同步问题了,也是在刷复试学校历年真题的时候遇到的。难度不大,但有一些细节,对于进程同步问题不熟悉的同学,可能会忽略,所以这里记录一下。
首先分析题目,一个箱子可以放N个零件,工人1一次放一个车架,工人2一次放一个车轮,工人3要做的是从箱子里拿出零件,然后组装车,但第一个需要注意的点是
一辆车需要两个车轮和一个车架。
知道题目的要求之后,我们需要考虑此题目中,需要哪些信号量。
1、箱子可以放N个零件,这里我们设empty=N,代表最多可以放置N个零件。第二个需要注意的点是
,有的人可能会再设一个mutex来互斥访问箱子,但这里其实是没有必要的,也是新手经常犯的一个错误。因为P、V操作都是原语,而原语是不可中断的程序段。而此题,当对empty进行PV操作时,其实以及实现了对箱子的互斥操作。
2、接着我们设置frame=0和wheel=0信号量来表示,箱子中车架和车轮的数量。
3、第三个需要注意的的点是
,程序可能出现,箱子里面全是车轮或者车架,所以我们要分别设定信号量来保证避免这种情况。
1 |
|
把一些注意点弄清楚了,代码其实就不难写了。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!