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

2.3.2 prime_pthr.c 中的数据争用

要检查 prime_pthr.c 中的数据争用,可以使用在2.2.2 创建数据争用检测实验中创建的实验之一。

要使用 er_print 显示 prime_pthr_instr.er 实验中的数据争用信息,请键入以下命令:


% er_print prime_pthr_inst.er

(er_print) 提示符下,键入 races 可看到类似如下的输出:


(er_print) races

Total Races:  4 Experiment:  prime_pthr_inst.er

Race #1, Vaddr: (Multiple Addresses)
      Access 1: Write, is_prime + 0x00000270,
                       line 27 in "prime_pthr.c"
      Access 2: Write, is_prime + 0x00000270,
                       line 27 in "prime_pthr.c"
  Total Callstack Traces: 2

Race #2, Vaddr: 0xffbfe714
      Access 1: Write, main + 0x0000025C,
                       line 60 in "prime_pthr.c"
      Access 2: Read,  work + 0x00000070,
                       line 40 in "prime_pthr.c"
  Total Callstack Traces: 1

Race #3, Vaddr: (Multiple Addresses)
      Access 1: Write, work + 0x00000150,
                       line 44 in "prime_pthr.c"
      Access 2: Write, work + 0x00000150,
                       line 44 in "prime_pthr.c"
  Total Callstack Traces: 2

Race #4, Vaddr: 0x21a90
      Access 1: Write, work + 0x00000198,
                       line 45 in "prime_pthr.c"
      Access 2: Write, work + 0x00000198,
                       line 45 in "prime_pthr.c"
  Total Callstack Traces: 2
(er_print)

该程序的此次特定运行期间发生了四次数据争用。

要在线程分析器中打开 prime_pthr_inst.er 实验,请键入以下命令:


% tha prime_pthr_inst.er

以下屏幕抓图显示了在 prime_pthr.c 中检测到的争用,如线程分析器所显示。请注意,这些争用与 er_print 所显示的争用相同。

图 2–3 prime_pthr.c 中检测到的数据争用

线程分析器窗口的屏幕抓图,显示了关于 prime_pthr.c 数据争用的 "Races"(争用)标签

prime_pthr.c 中显示了四个数据争用:

如果选择 Race #2(争用 2),然后单击 "Dual Source"(双源)标签,则会看到两个源代码位置,类似于以下屏幕抓图。

图 2–4 数据争用的源代码详细信息

线程分析器窗口的屏幕抓图,显示了 "Dual Source"(双源)标签。

Race #2(争用 2)的第一次访问位于第 60 行,显示在顶部面板中。第二次访问位于第 40 行,显示在底部面板中。源代码的左侧会突出显示 "Race Accesses"(争用访问)度量。此度量显示了该行上报告的数据争用访问总次数。