Exams › GATE › Technical
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 = 4, b = 4); (a = 3, b = 3); (a = 4, b = 3)
- (a = 3, b = 4); (a = 4, b = 3); (a = 3, b = 3)
- (a = 4, b = 4); (a = 4, b = 3); (a = 3, b = 4)
- (a = 2, b = 2); (a = 2, b = 3); (a = 3, b = 4)
Correct answer: (a = 4, b = 4); (a = 3, b = 3); (a = 4, b = 3)
Solution
Each statement is atomic and order within a thread is fixed (a=a+1 before b=b+1; b=2b before a=2a). Enumerating all valid interleavings yields exactly {(4,4),(3,3),(4,3)}: T1-then-T2 gives (4,4), T2-then-T1 gives (3,3), and the mixed orders give (4,3). The set matching this is (4,4);(3,3);(4,3), so the stored option is wrong.
Related GATE Technical questions
⚔️ Practice GATE Technical free + battle 1v1 →