GATE CS 2021 Set 2 — Question 52
Go beyond PYQs with Success TrackerAI-powered personalised practice and doubt support. Unlimited practice on eligible plans; AI usage limits apply.MSQ+2 / -0MediumProcesses & ThreadsOperating SystemMutex & SpinlocksProcess Synchronization
Operating System → Processes & Threads → Mutex & Spinlocks
Last updated
Question
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:
Which of the following statement(s) is/are correct?
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?
Correct answer
(A) Both P1 and P2 will print the value of x as 2.; (D) Both T1 and T2, in both the processes, will print the value of y as 1.
Solution
Step-by-step analysis:
1.Process Isolation: Processes P1 and P2 have separate address spaces. Global variables like
x and L1 are local to each process. They are not shared between P1 and P2.2.Process P1: It spawns two threads T1 and T2. These threads share the same address space, including
x and L1. Both threads call foo(). Inside foo(), the critical section x = x + 1 is protected by Acquire L1 and Release L1. Thus, x will be incremented exactly twice (once by T1, once by T2). The final value of x printed by P1 will be 2.3.Process P2: Similarly, P2 has its own
x and L1. Its threads T1 and T2 will increment its own x twice. The final value of x printed by P2 will also be 2. Thus, statement (A) is correct and (B) is incorrect.4.Variable y: The variable
y is declared inside foo(), making it a local variable. In multi-threaded environments, each thread has its own stack, and thus its own copy of local variables. 5.Thread Execution: For every thread (T1 and T2 in both P1 and P2),
y is initialized to 0, incremented to 1, and then printed. No thread shares y with another. Therefore, every thread will print y as 1. Thus, statement (D) is correct and (C) is incorrect.Continue learning with Success Tracker
A step still unclear? Work through it with support
Use Success Tracker to ask about the reasoning, then try another GATE CS question to check your understanding.
AI-powered practice· Unlimited practice on eligible plans
- PYQs with solutions
- Attempt available previous-year questions, then compare your reasoning with the worked solution. Coverage varies by stream.
- Practice that adapts
- Choose a topic, work on weaker areas and bookmark questions to revisit. Your attempts feed your progress tracking.
- AI doubt support
- Ask follow-up questions about a step or concept while practising, instead of stopping at the final answer.
Unlimited practice is available on eligible plans. Free practice and AI usage have limits; check the current plan allowances before choosing.
This page stays readable without an account. AI responses can be wrong; check them against the solution and source material.
More questions on Processes & Threads
2026 Set 2 Q23Which one of the following CPU scheduling algorithms cannot be preemptive?2026 Set 1 Q29With respect to deadlocks in an operating system, which of the following statements is/are FALSE?2026 Set 1 Q31In the context of relational database normalization, which of the following statements is/are true?2026 Set 1 Q35Consider a system consisting of instances of a resource , being shared by 5 processes.…2026 Set 2 Q51Consider three processes P1, P2, and P3 running identical code, as shown in the pseudocode below. A…