Abstract
In Java, some memory updates are necessarily visible to some threads but never
to others. A definition of Java memory consistency must take this fact into
consideration to capture the semantics of non-terminating systems, such as a
Java operating system. This paper presents a programmer-centered formal
definition of Java memory behavior that captures those semantics.
Our definition is employed to prove that it is impossible to provide
fundamental process coordination in Java, such as critical sections and
producer/consumer coordination, without the use of the synchronized and
volatile constructs. However, we show that a weaker form of synchronization
suffices to solve some of these problems in Java.
Notes
We are currently acquiring citations for the work deposited into this collection. We recognize the distribution rights of this item may have been assigned to another entity, other than the author(s) of the work.If you can provide the citation for this work or you think you own the distribution rights to this work please contact the Institutional Repository Administrator at digitize@ucalgary.ca