2012-05-13 125 views
3

当单个进程/线程被阻塞以获取相同的互斥锁时,可以称为“死锁”吗?单进程死锁 - ?

的mutex_lock(&互斥) - 成功
...
的mutex_lock(&互斥) - 受阻,互斥没有公布

似乎为 “nonshearable资源” 情况不适用:这里是唯一的单进程/线程,以便没有nonshearable资源 保持的情况下,等待:这里只有一个处理器,因此无需等待另一个进程释放请求的资源

+1

使用[递归互斥](http://stackoverflow.com/q/187761/60761)问题不会发生。没有它,这只是算法中的一个错误。 –

+0

绝对......我只是想知道与Colleman的“4个必要的死锁条件”有明显的正式差异: 2.持有并等待或持有资源:当前持有至少一个资源并请求正在持有的额外资源通过其他进程 - 在这种情况下没有其他进程 – user270398

+0

您的线程正在请求已被线程占用的资源。这是相同的线程无关紧要,只是奇特的。 –

回答

2

是的,这被认为是,或将可能*导致僵局。

该术语不绑定到线程或进程 - 但请求

假设你的锁(mutex)是折返,而一旦发生突变假设你的资源被锁定,它是突变来自多个来源的资源错误。如果您的单线程进程尝试在变化中尝试启动数据的新变化,并且锁定的非再入锁被请求锁定,会发生什么情况?死锁

'潜在',因为您尚未指定您正在处理的是哪种类型的互斥锁。

1

不,它不是死锁。如果四个条件同时保持

死锁可能出现。

  • 相互排斥:涉及的资源必须是不可共享的;否则,在必要时不会阻止进程使用资源。只有一个进程可以在任何给定的时间使用该资源。
  • 持有和等待或资源控制:进程当前持有至少一个资源并请求其他进程持有的其他资源。
  • 不抢占:资源只能由持有该资源的进程自行释放。
  • 循环等待:每个进程必须等待另一个进程正在等待第一个进程释放资源的资源。一般来说,有一组等待进程,P = {P1,P2,...,PN},使得P1正在等待P2所持有的资源,P2正在等待P3所持有的资源,依此类推,直到PN为止等待P1持有的资源。

more...

随着单个进程,所述循环等待条件不能得到满足,从而死锁可以从不与单个进程出现。