GATE | GATE CS 2021 | Set 2 | Question 52
Consider the following multi-threaded code segment (in a mix of C and pseudo-code), invoked by two processes P1 and P2, and each of the processes spawns two threads T1 and T2:
int x = 0; // global Lock L1; // global main () { create a thread to execute foo( ); // Thread T1 create a thread to execute foo( ); // Thread T2 wait for the two threads to finish execution; print(x);} foo() { int y = 0; Acquire L1; x = x + 1; y = y + 1; Release L1; print (y);}
Which of the following statement(s) is/are correct?
(A) Both P1 and P2 will print the value of x as 2.
(B) At least of P1 and P2 will print the value of x as 4.
(C) At least one of the threads will print the value of y as 2.
(D) Both T1 and T2, in both the processes, will print the value of y as 1.
Answer: (A) (D)
Explanation: (1) False, need not be true always.
(2) True, Execution order : P1->T1->T2; P2->T1->T2; P1-print(x), P2-print(x) | output is 4,4
(3) False, Threads maintain their own copy of stack and local variables (y) are stored on the stack.
(4) True, y=y+1 can be treated as a critical section, and it is well synchronized by Acquire L1 and Release L1
Quiz of this Question
Please Login to comment...