初始化为零的共享变量x由四个并发进程W,X,Y,Z进行如下操作。 W和X的每个进程都从内存中读取x,将其递增1,将其存储到内存中,然后终止。 Y和Z的每个进程都从内存中读取x,将x减2,将其存储到内存中,然后终止。读取x之前的每个过程都会在计数信号量S上调用P操作(即等待),并在将x存储到内存后在信号量S上调用V操作(即信号)。信号量S初始化为两个。所有进程完成执行后,x的最大可能值是多少?
(A) -2
(B) -1
(C) 1
(D) 2答案: (D)
解释:
背景说明:
关键部分,在该部分中,过程可能会更改公共变量,更新表,编写文件并执行其他函数。重要的问题是,如果一个进程在其关键部分执行,则不允许其他进程在其关键部分执行。每个进程都必须请求权限才能进入其关键部分。信号量是用于同步的工具,它用于消除关键部分的问题,即没有两个进程可以同时运行,因此为了消除这两个信号操作,我们使用了名为wait和signal的操作,该操作用于消除相互排斥的信号。关键部分。作为无符号的最重要的同步原语之一,因为您可以构建许多其他内容减少信号量称为获取或锁定它,增加信号量称为释放或解锁。
解决方案 :
由于信号量的初始值为2,因此两个过程可以同时进入关键部分-这很糟糕,我们可以了解原因。
假设X和Y是进程。X将x递增1,Z递减x2。现在,Z存回,然后X存回。因此,x的最终值为1而不是-1,并且两次Signal操作使信号量值再次变为2。因此,现在W和Z也可以像这样执行,并且x的值可以是2,这是在执行过程的任何顺序中可能的最大值。 (如果将信号量初始化为1,则可以正确执行处理,然后得到最终结果。
x的值为-2。)
选项(D)是正确的答案。
另一个解决方案:
进程可以以多种方式运行,以下是x达到最大值的情况之一信号量S初始化为2
进程W执行S = 1,x = 1,但不更新x变量。
然后进程Y执行S = 0,它递减x,现在x = -2且信号量S = 1
现在进程Z执行s = 0,x = -4,信号量S = 1
现在,进程W更新x = 1,S = 2,然后进程X执行X = 2
所以正确的选择是D
另一个解决方案:
S是一个初始化为2的计数信号量,即,两个进程可以进入受S保护的临界区中。W,X读取变量,加1并将其写回。 Y,Z可以读取变量,减2并将其写回。
每当运行Y或Z时,计数都会减少2。因此,为了获得最大的总和,我们应该将变量复制到增加计数的过程之一中,同时处理的减量应并行运行,以便无论它们写回内存可以通过递增过程来覆盖。因此,实际上减少永远不会发生。
相关链接:
http://quiz.geeksforgeeks.org/process-synchronization-set-1/
http://geeksquiz.com/operating-systems-process-management-question-11/以获得解释
该解决方案由Nitika Bansal提供
这个问题的测验