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

时间:2014-08-14 17:54:17

标签: c++ multithreading deadlock

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

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

2 个答案:

答案 0 :(得分:10)

死锁通常不会导致高CPU使用率,至少如果在操作系统支持的同步原语中发生死锁,以致进程在等待时进入休眠状态,则至少不会这样做。

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

此外,存在 livelock 的概念,当具有多个线程的程序无法前进到某个预期状态时会发生这种情况,因为某些条件(取决于线程之间的交互)无法实现即使没有任何线程明确等待某事。

答案 1 :(得分:9)

这取决于锁的类型。在死锁情况下,作为自旋循环实现的锁可以运行100%的CPU使用率。

另一方面,诸如内核互斥体之类的信号锁在等待时不会占用CPU周期,因此这种锁的死锁不会将CPU固定在100%