Visually where is the Deadlock? Why? How to avoid/fix?

时间:2015-04-29 04:04:16

标签: operating-system mutex semaphore

I am trying to understand and solve the following problem.

The following program attempts to use a pair of semaphores t mutual exclusion s

     

最初: s = 1 t = 0

    Thread 1    Thread 2
    --------    --------
1.  P(s);       P(s);
2.  V(s);       V(s);
3.  P(t);       P(t);
4.  V(t);       V(t);

请记住:

  

P 操作浪费时间或睡眠,直到资源受到保护   信号量变得可用,此时资源是可用的   马上声称。

     

V 操作是相反的:它使资源再次可用   在该过程使用完毕后。

  

1。为什么这个程序会导致死锁?

     

2。可以对初始信号量值进行哪些更改以消除死锁潜力?

更新

根据评论,我能够更好地理解和说明下面的死锁,所以如果我理解正确,请告诉我。

  

以下是死锁发生的方式,如果线程1在线程2之前得到CPU Time

enter image description here

  

如何解决这个问题?

t 的值设置为 1

2 个答案:

答案 0 :(得分:1)

死锁位于Line 3。在此行,Threads正在不断等待获取资源t的锁定。 t的初始值为0,表示它已处于锁定状态,例如,如果Thread1首先到达line 3,则等待t的值变为1并且类似地在一段时间之后Thread2将在同一行等待t变为1.这样,进程将持续等待资源创建“死锁”。

答案 1 :(得分:0)

提示:您可以通过锁定顺序避免死锁。例如,所有代码必须在锁定s之前锁定t。这个问题表明,如果不是这样,会发生什么。您可以更改初始信号量值"符合锁定顺序。