跳过导航链接 | |
退出打印视图 | |
Oracle Solaris Studio 12.3:线程分析器用户指南 Oracle Solaris Studio 12.3 Information Library (简体中文) |
关于报告数据争用的提示:
线程分析器检测运行时的数据争用。应用程序的运行时行为取决于使用的输入数据集和操作系统调度。请通过使用不同的线程数以及使用不同的输入数据集,在 collect 下运行应用程序。还应使用单个数据集重复进行实验,以最大限度地提高该工具检测到数据争用的可能性。
线程分析器检测从单个进程产生的不同线程之间的数据争用。它不检测不同进程之间的数据争用。
线程分析器不报告数据争用中访问的变量的名称。但是,若要确定变量的名称,可以检查发生两次数据争用访问的源代码行,再找出这些源代码行上写入的变量和读取的变量。
在某些情况下,线程分析器可能会报告实际在程序中并未发生的数据争用。这些数据争用称为误报。使用由用户实现的同步时或在线程之间回收内存时,通常会发生这种情况。例如,如果代码中包含实现自旋锁的手编程序集,线程分析器将无法识别这些同步点。通过在源代码中插入对线程分析器用户 API 的调用,可让线程分析器知道有关用户定义的同步的情况。有关更多信息,请参见2.5 误报和附录 A。
使用源代码级别检测报告的数据争用与使用二进制代码级别检测报告的数据争用可能不相同。在二进制代码级别检测中,缺省情况下会在打开共享库时检测这些共享库(无论它们是静态链接到程序中的,还是通过 dlopen() 动态打开的)。在源代码级检测中,仅当使用 -xinstrument=datarace 编译库的源代码时,才会对库进行检测。