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
Last Updated :
23 May, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...