Open In App

GATE | GATE CS 2021 | Set 2 | Question 52

Like Article
Like
Save
Share
Report

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
Previous
Next
Share your thoughts in the comments
Similar Reads