StreakPeaked· Practice

ExamsGATETechnical

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?

  1. (a = 4, b = 4); (a = 3, b = 3); (a = 4, b = 3)
  2. (a = 3, b = 4); (a = 4, b = 3); (a = 3, b = 3)
  3. (a = 4, b = 4); (a = 4, b = 3); (a = 3, b = 4)
  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 →