Shared Variables in Go: A Semantic Analysis of the Go Memory Model
Memory models as a part of programming language specifications have become increasingly popular the last two decades. They describe how the values that are obtained by reads are related to the values that are written by writes. To properly define this has proven particularly difficult for programming languages that allows for shared variables between multiple processes. In this thesis we formalize parts of the memory model specified by the Go language by making a structural operational semantics for it. We further use this semantics to prove that programs that are data race free will run under this semantics as they would under a strong memory model.