CDSchecker: checking concurrent data structures written with C/C++ atomics. Writing low-level concurrent software has traditionally required intimate knowledge of the entire toolchain and often has involved coding in assembly. New language standards have extended C and C++ with support for low-level atomic operations and a weak memory model, enabling developers to write portable and efficient multithreaded code. Developing correct low-level concurrent code is well-known to be especially difficult under a weak memory model, where code behavior can be surprising. Building reliable concurrent software using C/C++ low-level atomic operations will likely require tools that help developers discover unexpected program behaviors. In this paper we present CDSChecker, a tool for exhaustively exploring the behaviors of concurrent code under the C/C++ memory model. We develop several novel techniques for modeling the relaxed behaviors allowed by the memory model and for minimizing the number of execution behaviors that CDSChecker must explore. We have used CDSChecker to exhaustively unit test several concurrent data structure implementations on specific inputs and have discovered errors in both a recently published C11 implementation of a work-stealing queue and a single producer, single consumer queue implementation.
Keywords for this software
References in zbMATH (referenced in 5 articles )
Showing results 1 to 5 of 5.
- Doko, Marko; Vafeiadis, Viktor: Tackling real-life relaxed concurrency with FSL++ (2017)
- Lidbury, Christopher; Donaldson, Alastair F.: Dynamic race detection for C++11 (2017)
- Wickerson, John; Batty, Mark; Sorensen, Tyler; Constantinides, George A.: Automatically comparing memory consistency models (2017)
- Batty, Mark; Donaldson, Alastair F.; Wickerson, John: Overhauling SC atomics in C11 and OpenCL (2016)
- Vafeiadis, Viktor; Balabonski, Thibaut; Chakraborty, Soham; Morisset, Robin; Zappa Nardelli, Francesco: Common compiler optimisations are invalid in the C11 memory model and what we can do about it (2015)