3

单个进程/线程被阻塞试图获取相同的互斥锁时的情况可以称为“死锁”吗?

mutex_lock(&mutex) - 成功
...
mutex_lock(&mutex) - 被阻止,互斥锁未释放

似乎“不可剪切资源”的条件不适用:这里只有单个进程/线程,因此没有不可剪切资源保持和等待的情况:这里只有单个进程,因此无需等待另一个进程释放请求的资源

4

2 回答 2

2

是的,这是考虑过的,或者可能会*导致死锁。

该术语不受线程或进程的约束——而是请求

假设您的锁 ( mutex)不是可重入的,并且假设您的资源在变异时被锁定,并且从多个来源变异资源是错误的。当/如果您的单线程进程尝试在突变中启动数据的新突变并且请求锁定被锁定的不可重入锁时会发生什么?僵局

'潜在地',因为您没有确切指定您正在处理的互斥锁类型。

于 2012-05-13T10:14:38.617 回答
2

不,这不是死锁。

如果四个条件同时成立,就会出现死锁。

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

更多的...

对于单个进程,永远无法满足循环等待条件,因此单个进程永远不会出现死锁

于 2018-01-21T00:02:29.573 回答