livelock

作者: lqsss | 来源:发表于2018-03-27 17:08 被阅读0次

例子

活锁:是指线程1可以使用资源,但它很礼貌,让其他线程先使用资源,线程2也可以使用资源,但它很绅士,也让其他线程先使用资源。这样你让我,我让你,最后两个线程都无法使用资源。

p1 lock A
p2 lock B
p1 acquire B fail
p2 acquire A fail
P1、P2发现获取失败,则释放
p1 release
p2 release
...
P1、P2释放锁,再次重试
p1 lock A
p2 lock B
...

活锁死锁的区别

双方本质:都是因为上锁的顺序不正确而导致
死锁:获取不到资源,进程就会处于阻塞状态
活锁:获取不到资源,依旧处于Runnable状态,在不停地尝试获取,但是在做无用功。

饥饿和死锁

不同点:

  • 从进程状态考虑,死锁进程都处于等待状态,忙等待(处于运行或就绪状态)的进程并非处于等待状态,但却可能被饿死;
  • 死锁进程等待永远不会被释放的资源,饿死进程等待会被释放但却不会分配给自己的资源,表现为等待时限没有上界(排队等待或忙式等待);
  • 死锁一定发生了循环等待,而饿死则不然。这也表明通过资源分配图可以检测死锁存在与否,但却不能检测是否有进程饿死;
  • 死锁一定涉及多个进程,而饥饿或被饿死的进程可能只有一个。
  • 在饥饿的情形下,系统中有至少一个进程能正常运行,只是饥饿进程得不到执行机会。而死锁则可能会最终使整个系统陷入死锁并崩溃。

相关文章

网友评论

      本文标题:livelock

      本文链接:https://www.haomeiwen.com/subject/fmsscftx.html