【问题标题】:Do deadlocks cause high CPU utilization?死锁会导致 CPU 使用率过高吗?
【发布时间】:2014-08-14 17:54:16
【问题描述】:

死锁是否会使进程进入高 CPU 使用率,或者这两个进程是否都“休眠”,等待对方完成?

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

【问题讨论】:

    标签: c++ multithreading deadlock


    【解决方案1】:

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

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

    此外,还有 livelock 的概念,当具有多个线程的程序由于某些条件(取决于线程之间的交互)无法满足而无法前进到某个预期状态时,就会发生这种情况,即使没有线程明确地等待某事。

    【讨论】:

    • 相当肯定这个词是 livelock
    • 你知道,生活与生活一直是我个人的英语误用之一……已修复。
    • 你好@AlexanderGessler,你能提供一个活锁的例子吗?
    【解决方案2】:

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

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

    【讨论】:

    • 由于自旋锁冲突而无法向前推进通常被称为“活锁”。
    • 从最初的问题来看,我怀疑 OP 是否知道这种区别。
    • 你好@dthorpe,你能提供一个活锁的例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多