Oracle® Solaris Studio 12.4:线程分析器用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

什么是死锁?

死锁描述的是两个或多个线程由于相互等待而永远被阻塞的情况。导致死锁的原因有很多。线程分析器可检测由于不恰当使用互斥锁而导致的死锁。此类死锁通常发生在多线程应用程序中。

    满足以下所有条件时,包含两个或多个线程的进程可能会进入死锁状态:

  • 已持有锁的线程请求新锁

  • 同时发出对新锁的请求

  • 两个或多个线程形成一个循环链,其中每个线程都在等待链中下一个线程持有的锁

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

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

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

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