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:
如何解决这个问题?
将 t 的值设置为 1
答案 0 :(得分:1)
死锁位于Line 3
。在此行,Threads
正在不断等待获取资源t
的锁定。 t
的初始值为0,表示它已处于锁定状态,例如,如果Thread1
首先到达line 3
,则等待t
的值变为1并且类似地在一段时间之后Thread2
将在同一行等待t
变为1.这样,进程将持续等待资源创建“死锁”。
答案 1 :(得分:0)
提示:您可以通过锁定顺序避免死锁。例如,所有代码必须在锁定s
之前锁定t
。这个问题表明,如果不是这样,会发生什么。您可以更改初始信号量值"符合锁定顺序。