Why Are Race Conditions So Difficult to Detect?
Detecting race conditions in a threaded program can be done at runtime, which is
referred to as a dynamic detection. Or, it can be done at
compile time by scanning a source program and reporting race conditions without
actually running the program. This is referred to as a static
detection. Unfortunately, statically detecting race conditions in programs
using multiple semaphores is NP-hard (Netzer and Miller 1990), meaning an
efficient solution is unlikely. If the synchronization mechanism is weaker than
semaphores, an exact and efficient algorithm does exist (Netzer and Ghosh 1992);
otherwise, only heuristic algorithms are available
(Choi and Min 1991, and Dinning and Schonberg 1991). The problem of heuristic
algorithms is that they can only report potential race conditions,
meaning the detection program may report many race conditions that are actually
not race conditions. However, since race condition detection is
NP-hard, one never knows whether these potential race conditions are
real race conditions. This is the reason that not very many useful
tools exist that can pinpoint race conditions accurately. How about runtime
detection? This is impractical because we need to examine every memory access and
it is too late when one is detected.
References
- Jong-Deok Choi and Sang Lyul Min,
RACE FRONTIER: Reproducing Data Races in Parallel-Program Debugging,
Third ACM SIGPLAN Symposium on Principles & Practice of
Parallel Programming (PPOPP),
April 1991, pp. 145-154.
- Anne Dinning and Edith Schonberg,
Detecting Access Anomalies in Programs with Critical Sections,
Proceeding of the ACM/ONR Workshop on Parallel and
Distributed Debugging,
May 1991, pp. 85-96.
- Robert H. B. Netzer and S. Ghosh,
Efficient Race Condition Detection for Shared-Memory Programs with
Post/Wait Synchronization,
International Conference on Parallel Processing,
August 1992, pp. II242-II246.
- Robert H. B. Netzer and Barton P. Miller,
On the Complexity of Event Ordering for Shared-Memory Parallel
Program Execution,
International Conference on Parallel Processing,
August 1990, pp. II93-II97.
- Robert H. B. Netzer and Barton P. Miller,
What Are Race Conditions? Some Issues and Formalization,
ACM Letters on Programming Languages and Systems,
Vol. 1 (1992), No. 1 (March), pp. 74-88.
Materials of this section are taken from the following paper:
- Steve Carr, Jean Mayo and Ching-Kuang Shene,
Race Conditions: A Case Study,
The Journal of Computing in Small College,
Vol. 17 (2001), No. 1 (October), pp. 88-102.