在一个过程中死锁 - ?

时间:2012-05-13 09:45:23

标签: c++ multithreading thread-safety mutex deadlock

单个进程/线程被阻止尝试获取相同的互斥锁时的条件可以被称为“死锁”吗?

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

似乎“不可用资源”的条件不适用:这里只有单个进程/线程,因此不存在不可用资源的情况 保持并等待:这里只有一个进程,所以不要等待另一个进程释放所请求的资源

2 个答案:

答案 0 :(得分:2)

是的,这被认为是,或者可能会导致死锁。

该术语未绑定到线程或进程 - 而是请求

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

'可能',因为您没有准确指定您正在处理的互斥锁的类型。

答案 1 :(得分:1)

不,这不是死锁。

如果同时存在四个条件,则会出现

死锁

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

more...

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