题53

题目

【2011 统考真题】有两个并发执行的进程 和进程 ,共享初值为 1 的变量
减 1 。
加 1 和减 1 操作的指令序列分别如下:
//加 1 操作

load R1, x // 取 x 到寄存器 R1
inc R1
store x, R1 // 将 R1 的内容存入 x

//减 1 操作

load R2, x // 取 x 到寄存器 R2
dec R2
store x, R2 // 将 R2 的内容存入 x

两个操作完成后, 的值 ( )。
A. 可能为 -1 或 3
B. 只能为 1
C. 可能为 0,1 或 2
D. 可能为 或 2

分析

  • 的值最终是多少,取决于最后是哪个进程对 进行了写操作
  • 一个进程一旦拿到了 值,它最后对 写操作的值也就确定了
  • 所以本题只需考虑两个进程拿到 值的所有可能情况
    • 对于 进程
      • 最初取到的 值可能是 1
      • 也可能是 进程完成后更新得到的 值 0
      • 因此对于 进程,最终写入 的值可能是 2 (当它最初取到 1 时) 和 1 (当它最初取到 0 时)
    • 同理,对于 进程
      • 最初取到的 值可能是 1
      • 也可能是 进程完成后更新得到的 值 2
      • 因此对于 进程,最终写入 的值有可能是 0 (当它最初取到 1 时) 和 1 (当它最初取到 2 时)
  • 因此,最终的 值可能是 0、1 或 2

C