JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.3:线程分析器用户指南     Oracle Solaris Studio 12.3 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  什么是线程分析器?它有什么作用?

1.1 线程分析器入门

1.1.1 什么是数据争用?

1.1.2 什么是死锁?

1.2 线程分析器使用模型

1.2.1 检测数据争用的使用模型

1.2.1.1 检测代码以检测数据争用

源代码级别检测

二进制代码级别检测

1.2.1.2 基于检测后的应用程序创建实验

1.2.1.3 检查实验中是否存在数据争用

1.2.2 检测死锁的使用模型

1.2.2.1 创建用于检测死锁的实验

1.2.2.2 检查实验中是否存在死锁

1.2.3 检测数据争用和死锁的使用模型

1.3 线程分析器界面

2.  数据争用教程

3.  死锁教程

A.  线程分析器可识别的 API

B.  有用提示

1.1 线程分析器入门

线程分析器是性能分析器的一个专门视图,设计用于检查线程分析实验。可使用一个单独的命令 tha 将性能分析器启动到该专门视图下,以这种方式启动的该工具称为线程分析器。

线程分析器可以显示您专门生成的用来检查相应数据类型的实验中的数据争用和死锁,如本文档中所述。

1.1.1 什么是数据争用?

线程分析器可检测多线程进程执行期间发生的数据争用。满足以下所有条件时,就会发生数据争用:

这三个条件成立时,访问的顺序是不确定的,每次运行的计算结果都可能因该顺序而异。有些数据争用可能是良性的(例如,内存访问用于忙等待时),但许多数据争用都属于程序中的错误。

线程分析器适用于用 POSIX 线程 API、Solaris 线程 API、OpenMP 或混用这几者编写的多线程程序。

1.1.2 什么是死锁?

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

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

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

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