Consider the following two threads T1 and T2 that update two shared variables a and b. Assume that initially a = b = 1. Though context switching between threads can happen at any time, each statement of T1 or T2 is executed atomically without interruption.
T1:
a = a + 1;
b = b + 1;T2:
b = 2 * b;
a = 2 * a;Which one of the following options lists all the possible combinations of values of a and b after both T1 and T2 finish execution?
- (A)
(a = 4, b = 4); (a = 3, b = 3); (a = 4, b = 3)
- (B)
(a = 3, b = 4); (a = 4, b = 3); (a = 3, b = 3)
- (C)
(a = 4, b = 4); (a = 4, b = 3); (a = 3, b = 4)
- (D)
(a = 2, b = 2); (a = 2, b = 3); (a = 3, b = 4)
