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

2.1.3.1 数据争用在 prime_omp.cprime_pthr.c 中的效果

当代码包含竞争情况时,内存访问的顺序是不确定的,因此每次运行的计算结果会不同。

通过编译和运行示例可以看出,由于代码中存在数据争用,每次执行 prime_ompprime_pthr 时都会产生不正确且不一致的结果。

在下面的示例中,键入粗体形式的命令以编译并运行 prime_omp 程序:


% cc -xopenmp=noopt  -o prime_omp prime_omp.c -lm
%
% ./prime_omp
Number of prime numbers between 2 and 10000: 1229
% ./prime_omp
Number of prime numbers between 2 and 10000: 1228
% ./prime_omp
Number of prime numbers between 2 and 10000: 1229

在下面的示例中,键入粗体形式的命令以编译并运行 prime_pthr 程序:


% cc -mt -o prime_pthr prime_pthr.c -lm
%
% ./prime_pthr
Number of prime numbers between 2 and 10000: 1140
% ./prime_pthr
Number of prime numbers between 2 and 10000: 1122
% ./prime_pthr
Number of prime numbers between 2 and 10000: 1141

请注意每个程序的三次运行结果的不一致性。可能需要运行这些程序三次以上才能看到不一致的结果。

接下来将会校验代码并创建实验,以便可以找出发生数据争用的位置。