1.2 什么是数据争用?
线程分析器可检测多线程进程执行期间发生的数据争用。满足以下所有条件时,就会发生数据争用:
-
一个进程内的两个或多个线程同时访问同一内存位置
-
至少其中一个访问是用于写入
-
线程未使用任何互斥锁来控制它们对该内存的访问
这三个条件成立时,访问的顺序是不确定的,每次运行的计算结果都可能因该顺序而异。有些数据争用可能是良性的(例如,内存访问用于忙等待时),但许多数据争用都属于程序中的错误。
线程分析器适用于用 POSIX 线程 API、Solaris 线程 API、OpenMP 或混用这几者编写的多线程程序。