2018 操作系统 进程和线程 选择题
第 25 题

属于同一进程的两个线程 thread1 和 thread2 并发执行,共享初值为 0 的全局变量 x。thread1 和 thread2 实现对全局变量 x 加 1 的机器级代码描述如下:

thread1

mov R1, x   // (x) → R1
inc R1      // (R1) + 1 → R1
mov x, R1   // (R1) → x

thread2

mov R2, x   // (x) → R2
inc R2      // (R2) + 1 → R2
mov x, R2   // (R2) → x

在所有可能的指令执行序列中,使 x 的值为 2 的序列个数是()。

进程和线程

A. 1 B. 2 C. 3 D. 4

[tag_link]

正确答案:B

仔细阅读两个线程代码可知,threadl 和 thread2 均是对 x 进行加 1 操作,x 初始值为 0,若要使得最终 x = 2,只有先执行 thread1 再执行 thread2,或先执行 thread2 再执行 threadl,故只有 2 种可能,选 B。