首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >锁树算法死锁检测

锁树算法死锁检测
EN

Stack Overflow用户
提问于 2012-08-13 01:56:46
回答 2查看 1.7K关注 0票数 0

我一直在研究Lock tree死锁检测算法的一些示例,但无法弄清楚在这种特定情况下死锁是如何发生的:

代码语言:javascript
复制
Thread 1:           Thread 2:

lock(A)             lock(E)
lock(C)             lock(D)
unlock(C)           unlock(D)
lock(B)             unlock(A)
lock(D)             lock(A)
lock(E)             lock(C)
unlock(E)           unlock(C)
unlock(D)           unlock(A)
unlock(B)
unlock(A)

据我所知,Lock树应该是这样的:

代码语言:javascript
复制
  T1:          T2:
              /  \
  A          E    A
 / \         |    |
C   B        D    C
    |
    D
    | 
    E

会不会死锁发生在节点T1: D-E和T2: E- D,因为线程以相反的顺序获取这些锁?

我如何建议插入一条lock和一条unlock语句来消除死锁?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-13 02:04:53

线程1执行: lock(a),lock(c),unlock(c),lock(b),lock(d)

所以现在a,b和d被锁定了

线程2执行: lock(e),lock(d)

所以现在e也被锁定了,线程2正在等待d解锁。

现在线程一被唤醒并执行以下操作: lock(e)

现在他们被卡住了-

%1正在等待%2解锁% e。

%2正在等待%1解锁%d

避免这种情况的方法之一是一次性锁定所需的所有内容,而不是作为单独的操作。

票数 1
EN

Stack Overflow用户

发布于 2012-10-31 05:17:49

是的,在T2中,先锁(B)再锁(E)可以防止死锁。这被称为门锁。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11924436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档