ABSTRACT

This book is intended to give an introduction to thinking about concurrency at the level of the programming language. To date, the vast majority of mainstream programming languages are designed to express sequential programs. Current methods for writing concurrent programs in these languages exist primarily as add-on libraries that encapsulate the expression of concurrency in a form that, to the compiler or language, remains sequential. Techniques such as OpenMP provide more information to the compiler in the form of code annotations, but they still suffer from the fact that they are inherently bound to the sequential languages that they are used with. Java is one of the only mainstream languages with concurrency concepts defined as part of the language itself, and even then, most of the facilities for concurrent programming are provided within the standard library and not the language definition. Given that these facilities most often exist outside the scope of language definitions, the acts of optimization, efficient code generation, and correctness checking by compilation and source analysis tools prove to be very difficult.