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?
Step 1: Scope of variables across processes and threads.
Each process ($P1$ and $P2$) has its own address space. Hence, the global variable $x$ and the lock $L1$ are shared between threads within a process but not shared across processes.
Step 2: Behaviour of variable $x$.
In each process, two threads $T1$ and $T2$ execute \texttt{foo()}.
The increment operation on $x$ is protected by the lock $L1$, so there is no race condition.
Thus, in each process:
\[
x = 0 \xrightarrow{\text{two increments}} x = 2
\]
Therefore, both $P1$ and $P2$ will print $x = 2$.
So, Option (A) is correct and Option (B) is false.
Step 3: Behaviour of variable $y$.
The variable $y$ is a local variable inside the function \texttt{foo()}.
Each thread has its own separate instance of $y$, initialized to $0$.
Inside \texttt{foo()}, each thread executes:
\[
y = y + 1
\]
exactly once. Hence, each thread prints:
\[
y = 1
\]
There is no possibility of $y$ becoming $2$ in any thread.
Step 4: Evaluation of remaining options.
Option (C): False, since $y$ is local to each thread and incremented only once.
Option (D): True, because both $T1$ and $T2$ in both processes will print $y = 1$.
Step 5: Conclusion.
The correct statements are (A) and (D).
Consider the following threads, T1, T2, and T3 executing on a single processor, synchronized using three binary semaphore variables, S1, S2, and S3, operated upon using standard wait() and signal(). The threads can be context switched in any order and at any time.

Consider the following pseudocode, where S is a semaphore initialized to 5 in line#2 and counter is a shared variable initialized to 0 in line #1. Assume that the increment operation in line#7 is not atomic.
1. int counter = 0;
2. Semaphore S = init(5);
3. void parop(void)
4. {
5. wait(S);
6. wait(S);
7. counter++;
8. signal(S);
9. signal(S);
10. } If five threads execute the function parop concurrently, which of the following program behavior(s) is/are possible?
In a 4-bit ripple counter, if the period of the waveform at the last flip-flop is 64 microseconds, then the frequency of the ripple counter in kHz is ______________. {(Answer in integer)}
Consider the following C code segment:
int x = 126, y = 105;
do {
if (x > y)
x = x - y;
else
y = y - x;
} while (x != y);
printf("%d", x);
The output of the given C code segment is ____________. (Answer in integer)
The following two signed 2’s complement numbers (multiplicand \( M \) and multiplier \( Q \)) are being multiplied using Booth’s algorithm:
| Multiplicand (\( M \)) | Multiplier (\( Q \)) |
|---|---|
| 1100 1101 1110 1101 | 1010 0100 1010 1010 |
The total number of addition and subtraction operations to be performed is __________. (Answer in integer)
The maximum value of \(x\) such that the edge between the nodes B and C is included in every minimum spanning tree of the given graph is __________ (answer in integer).
Consider the following C program
The value printed by the given C program is __________ (Answer in integer).