第 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。