Consider the following pseudocode, where S is a semaphore intialized to 5 in line#2 an counter is a shared variable intialized 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?
Consider a state of the system with the Allocation matrix as shown below, and in which $$3$$ instances of $$E$$ and $$3$$ instances of $$F$$ are the only resources available.
Allocation | |||
---|---|---|---|
E | F | G | |
P0 | 1 | 0 | 1 |
P1 | 1 | 1 | 2 |
P2 | 1 | 0 | 3 |
P3 | 2 | 0 | 0 |
Max | |||
---|---|---|---|
E | F | G | |
P0 | 4 | 3 | 1 |
P1 | 2 | 1 | 4 |
P2 | 1 | 3 | 3 |
P3 | 5 | 4 | 1 |
From the perspective of deadlock avoidance, which one of the following is true?
$$\,\,\,\,\,\,\,{\rm I}.$$ $$\,\,\,\,\,\,$$ Processes should acquire all their resources at the beginning of execution. If
$$\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,$$ any resource is not available, all resources acquired so far are released
$$\,\,\,\,\,{\rm II}.$$ $$\,\,\,\,\,\,$$ The resources are numbered uniquely, and processes are allowed to request
$$\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,$$ for resources only in increasing resource numbers
$$\,\,\,{\rm III}.$$ $$\,\,\,\,\,\,$$ The resources are numbered uniquely, and processes are allowed to request
$$\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,$$ for resources only in decreasing resource numbers
$$\,\,\,{\rm IV}.$$ $$\,\,\,\,\,\,$$ The resources are numbered uniquely. A process is allowed to request only
$$\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,$$ for a resource with resource number larger than its currently held resources
Which of the above policies can be used for preventing deadlock?