|
Abstract
After many years, support for multithreading has been integrated into mainstream
programming languages. Inclusion of this feature brings with it a need
for a clear and direct explanation of how threads interact through memory. Programmers
need to be told, simply and clearly, what might happen when their
programs execute. Compiler writers need to be able to work their magic without
interfering with the promises that are made to programmers.
Java’s original threading specification, its memory model, was fundamentally
flawed. Some language features, like volatile fields, were under-specified: their
treatment was so weak as to render them useless. Other features, including
fields without access modifiers, were over-specified: the memory model prevents
almost all optimizations of code containing these “normal” fields. Finally, some
features, like final fields, had no specification at all beyond that of normal fields;
no additional guarantees were provided about what will happen when they are
used.
This work has attempted to remedy these limitations. We provide a clear and
concise definition of thread interaction. It is sufficiently simple for programmers
to work with, and flexible enough to take advantage of compiler and processorlevel
optimizations. We also provide formal and informal techniques for verifying
tht the model provides this balance. These issues had never been addressed
for any programming language: in addressing them for Java, this dissertation
provides a framework for all multithreaded languages. The work described in this
dissertation has been incorporated into the version 5.0 of the Java programming
language.
Project Done By Jeremy Manson, Doctor of Philosophy, 2004
Dissertation directed by: William Pugh
Department of Computer Science
<<
back |