  Writing correct concurrent code that uses atomics under the C/C++ memory
model is extremely difficult. We present C11Tester, a race detector for the
C/C++ memory model that can explore executions in a larger fragment of the
C/C++ memory model than previous race detector tools. Relative to previous
work, C11Tester's larger fragment includes behaviors that are exhibited by ARM
processors. C11Tester uses a new constraint-based algorithm to implement
modification order that is optimized to allow C11Tester to make decisions in
terms of application-visible behaviors. We evaluate C11Tester on several
benchmark applications, and compare C11Tester's performance to both tsan11rec,
the state of the art tool that controls scheduling for C/C++; and tsan11, the
state of the art tool that does not control scheduling.
