死锁会导致高CPU利用率吗?

Jon*_*han 2 c++ multithreading deadlock

死锁会将进程置于高CPU使用率,还是这两个进程都"休眠",等待另一个进程完成?

我试图在Linux系统上调试用C++编写的多线程程序.我注意到一个特定进程的CPU利用率过高,我想知道是否可能是由于死锁问题.我已经确定一个进程一直使用比我预期的更多的CPU(使用top),并且该过程有效,但它运行缓慢.如果死锁导致进程休眠并且不会导致高CPU使用率,那么至少我知道这不是一个死锁问题.

Ale*_*ler 10

死锁通常不会导致高CPU使用率,至少如果死锁发生在OS支持的同步原语中,使得进程在等待时休眠,则至少不会.

如果发生死锁,即无锁同步机制(例如与空闲循环进行比较交换),CPU使用率将会上升.

此外,还有一个活锁的概念,当具有多个线程的程序无法前进到某个预期状态时会发生,因为某些条件(取决于线程之间的交互)无法实现,即使没有任何线程明确等待为了某件事.

  • 相当肯定这个词是*livelock*. (3认同)

dth*_*rpe 9

这取决于锁的类型.实现为旋转循环的锁可能在死锁情况下运行100%的CPU使用率.

另一方面,诸如内核互斥体之类的信号锁在等待时不消耗CPU周期,因此这种锁的死锁不会使CPU处于100%的固定状态

  • 由于自旋锁相互冲突而无法取得进展通常被称为"活锁". (2认同)