Separation of concerning things: a simpler basis for defining and programming with the C/C++ memory model (extended version)

04/07/2022
by   Robert J. Colvin, et al.
0

The C/C++ memory model provides an interface and execution model for programmers of concurrent (shared-variable) code. It provides a range of mechanisms that abstract from underlying hardware memory models – that govern how multicore architectures handle concurrent accesses to main memory – as well as abstracting from compiler transformations. The C standard describes the memory model in terms of cross-thread relationships between events, and has been influenced by several research works that are similarly based. In this paper we provide a thread-local definition of the fundamental principles of the C memory model, which, for concise concurrent code, serves as a basis for relatively straightforward reasoning about the effects of the C ordering mechanisms. We argue that this definition is more practical from a programming perspective and is amenable to analysis by already established techniques for concurrent code. The key aspect is that the memory model definition is separate to other considerations of a rich programming language such as C, in particular, expression evaluation and optimisations, though we show how to reason about those considerations in the presence of C concurrency. A major simplification of our framework compared to the description in the C standard and related work in the literature is separating out considerations around the "lack of multicopy atomicity", a concept that is in any case irrelevant to developers of code for x86, Arm, RISC-V or SPARC architectures. We show how the framework is convenient for reasoning about well-structured code, and for formally addressing unintuitive behaviours such as "out-of-thin-air" writes.

READ FULL TEXT

page 1

page 2

page 3

page 4

research
03/12/2018

Memory Models for C/C++ Programmers

The memory model is the crux of the concurrency semantics of shared-memo...
research
02/14/2018

A sound and complete definition of linearizability on weak memory models

Linearizability is the standard correctness notion for concurrent object...
research
02/13/2019

Concurrent Computing with Shared Replicated Memory

The behavioural theory of concurrent systems states that any concurrent ...
research
04/27/2019

A Practical Analysis of Rust's Concurrency Story

Correct concurrent programs are difficult to write; when multiple thread...
research
06/12/2018

Making Concurrent Algorithms Detectable

Non-volatile memory (NVM) promises persistent main memory that remains c...
research
05/14/2021

Linearizability: a Typo

Linearizability is the de facto consistency condition for concurrent obj...
research
04/10/2019

Compiling a Calculus for Relaxed Memory: Practical constraint-based low-level concurrency

Crary and Sullivan's Relaxed Memory Calculus (RMC) proposed a new declar...

Please sign up or login with your details

Forgot password? Click here to reset