Step 1: Understanding the sections.
- **Critical section** (C): This is the section where the process accesses shared resources.
- **Entry section** (A): This is the section before the critical section, where the process requests entry.
- **Remainder section** (B): The section after the critical section, where the process releases the resource and performs other tasks.
- **Exit section** (D): This section handles the exit process from the critical section.
Step 2: Arrange the sections correctly.
To form a valid structure for a process in the critical section:
- The process first enters the **Entry section** (A), checks for any conditions (if needed), and then moves to the **Critical section** (C).
- After completing its task in the **Critical section**, the process moves to the **Exit section** (D) to release the resource.
- Finally, the process moves to the **Remainder section** (B) for other tasks.
Step 3: Conclusion.
The correct order of statements is **(C), (B), (A), (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 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?
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?