Sun Studio 12:线程分析器用户指南

1.3 什么是死锁?

死锁描述两个或多个线程因相互等待而被永远阻塞(挂起)的情况。导致死锁的原因有多种。线程分析器可检测到因不正确使用互斥锁而导致的死锁。这种类型的死锁在多线程应用程序中比较常见。以下条件成立时,具有两个或多个线程的进程可能会进入死锁状态:

以下是一个死锁情况的简单示例:

线程 1 持有锁 A 并请求锁 B 

线程 2 持有锁 B 并请求锁 A 

死锁可能属于两种类型:潜在死锁或实际死锁。潜在死锁不一定在给定运行中发生,但是它可能发生在程序的任何执行过程中,具体取决于线程的调度和线程的锁定请求的时限。实际死锁是在执行程序的过程中发生的死锁。实际死锁会导致所涉及的线程挂起,但是可能会也可能不会导致整个进程挂起。