in Operating System edited by
11,620 views
31 votes
31 votes

Consider two processes $P_1$ and $P_2$ accessing the shared variables $X$ and $Y$ protected by two binary semaphores $S_X$ and $S_Y$ respectively, both initialized to 1. $P$ and $V$ denote the usual semaphore operators, where $P$ decrements the semaphore value, and $V$ increments the semaphore value. The pseudo-code of $P_1$ and $P_2$ is as follows:
$$\begin{array}{|l|l|}\hline \text{$P_1$:}  &  \text{$P_2$:}  \\\hline  \text{While true do \{} & \text{While true do \{} \\ L_1:\ldots\ldots & L_3:\ldots\ldots \\  L_2:\ldots\ldots & L_4:\ldots\ldots \\ \text{X = X + 1;} & \text{Y = Y + 1;} \\ Y=Y-1;&X = Y-1;
\\  \text{$V(S_X);$} & \text{$V(S_Y);$} \\  \text{$V(S_Y);$} & \text{$V(S_X);$} \\\}&\} \\\hline  \end{array}$$
In order to avoid deadlock, the correct operators at $L_1$, $L_2$, $L_3$ and $L_4$ are respectively.

  1. $P(S_Y), P(S_X); P(S_X), P(S_Y)$

  2. $P(S_X), P(S_Y); P(S_Y), P(S_X)$

  3. $P(S_X), P(S_X); P(S_Y), P(S_Y)$

  4. $P(S_X), P(S_Y); P(S_X), P(S_Y)$

in Operating System edited by
11.6k views

1 comment

Look at the first locks of both processes (L1 and L3). If both hold different locks, that is, L1 holds Sx and L3 holds Sy (or vice versa), there will always be deadlock.
2
2

4 Answers

41 votes
41 votes
Best answer
  1. deadlock $p1$ : line$1$|$p2$:line$3$| $p1$: line$2$(block) |$p2$ :line$4$(block)
    So, here $p1$ want $s(x)$ which is held by $p2$ and $p2$ want $s(y$) which is held by $p1$.
    So, its circular wait (hold and wait condition). So. there is deadlock.
     
  2. deadlock $p1$ : line $1$| $p2$ line $3$|$p1$: line $2$(block) |$p2$ : line $4$(block)
    Som here $p1$ wants sy which is held by $p2$ and $p2$ wants $sx$ which is held by $p1$. So its circular wait (hold and wait ) so, deadlock.
     
  3. $p1$ :line $1$|$p2$ : line $3| p2$ line $4$ (block) $|p1$ line $2$ (block) here, $p1$ wants $sx$ and $p2$ wants $sy$, but both will not be release by its process $p1$ and $p2$ because there is no way to release them. So, stuck in deadlock.
     
  4. $p1$ :line $1$ $|p2$ : line $3$ (block because need sx ) $|p1$ line $2 |p2$ : still block $|p1$: execute cs then up the value of sx |p2 :line 3 line $4$(block need $sy$)$| p1$ up the$ sy$ $|p2$ :lin$4$ $4$ and easily get $cs$.
    We can start from $p2$ also, as I answered according only $p1$, but we get same answer.
    So, option (D) is correct 
edited by
by

4 Comments

Sir, after taking the option D as a correct sequence then what can we comment about bounded waiting and progress? Are they satisfied here?
0
0
i can understand that option D will be deadlock free. but can u tell me if this solution will follow bounded waiting and progess too? yes it’s not asked in question but i saw similar question so.
0
0
E) Sy,Sx,Sy,Sx is also another valid option, although not in options
0
0
17 votes
17 votes

Option (A):

$\Rightarrow$ Deadlock possible


Option (B) . Same as Option (A). Deadlock possible.


Option (C):

No need to think of another process to get a deadlock situation:

$\Rightarrow$ Both processes will be blocked once they start.


Option (D) is ok ! as far as deadlock is concerned.


by

4 Comments

@debashidh

in option A there may b not deadlock .

0
0
QS asks to avoid options having non zero probability of deadlock. Qs does not ask which option may have deadlock.
0
0
edited by
well
0
0
14 votes
14 votes
let execute P1 till L1 and then execute P2 till L3..
now check options.
Option A,B,C results deadlock.
even Option C always deadlocked..

Option D works fine ..
edited by
2 votes
2 votes
Deadlock is possible when there is no order defined how resources will be consumed by processes. Therefore graph based protocol is free from deadlock as every process try checking from root and if first resource is occupied then the process is blocked and the process which has locked it first completes its execution. After checking the option you can see both processes are consuming resources in an order in option d. Sx followed by Sy which prevents deadlock.
Answer:

Related questions