(操作系统)有两个并发执行的进程P? 和 P?,共享初值为1的变量x。P? 对x加1,P? 对x减1。加1和减1操作的指令序列分别如下所示。11联考-32两个操作完成后,x的值 ()。A. 可能为-1或3 B. 只能为1 C. 可能为0、1或2D. 可能为-1、0、1...
(操作系统)有两个并发执行的进程P? 和 P?,共享初值为1的变量x。P? 对x加1,P? 对x减1。加1和减1操作的指令序列分别如下所示。11联考-32两个操作完成后,x的值 ( )。A. 可能为-1或3 B. 只能为1 C. 可能为0、1或2D. 可能为-1、0、1或2
先别急着看答案,咱们一步步理清楚。
并发执行的时候,P?和P?的指令顺序可能“乱套”,共享变量x的结果就会变。
先看顺序执行的情况:P?先跑完,x从1→2再被P?减回1;P?先跑的话,x从1→0再被P?加回1——这两种情况结果都是1。
要是指令交错着来呢?
比如P?先加载x=1(还没改),P?也跟着加载同一个初始值1。P?执行加1变2,P?执行减1变0,最后存的时候谁后存就覆盖谁——要么是0,要么是2。
还有种情况是“覆盖逻辑”——
比如P?的存操作在P?之后,那0就被覆盖成2;反过来就是2被覆盖成0。但如果其中一个的存操作是基于已经被另一个修改过的x,结果可能还是1。
总结一下:
x的可能值是0、1或2,所以选C。
专业解答各类课程问题、介绍师资和学校情况