题57

题目

【2018 统考真题】属于同一进程的两个线程 thread 1 和 thread2 并发执行, 共享初值为 0 的全局变量 x
thread 1 和 thread 2 实现对全局变量 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

分析

仔细阅读两个线程代码可知, thread 1 和 thread 2 均是对 进行加 1 操作, 的初始值为 0,若要使得最终 ,只能先执行完 thread 1 再执行 thread 2,或先执行完 thread 2 再执行 thread 1,因此仅有 2 种可能。

B