Consider a multi-threaded program with two threads T1 and T2. The threads share two semaphores: s1 (initialized to 1) and s2 (initialized to 0). The threads also share a global variable x (initialized to 0). The threads execute the code shown below.
// code of T1
wait(s1);
x = x+1;
print(x);
wait(s2);
signal(s1);// code of T2
wait(s1);
x = x+1;
print(x);
signal(s2);
signal(s1);Which of the following outcomes is/are possible when threads T1 and T2 execute concurrently?
Tap to open full sizeFigure description
Two columns of code side by side, T1 on the left and T2 on the right, as given in the stem.
- (A)
T1 runs first and prints 1, T2 runs next and prints 2
- (B)
T2 runs first and prints 1, T1 runs next and prints 2
- (C)
T1 runs first and prints 1, T2 does not print anything (deadlock)
- (D)
T2 runs first and prints 1, T1 does not print anything (deadlock)