Principles of Concurrent and Distributed Programming
Prof. M. Ben-Ari is with the Department of Science Teaching at
the Weizmann Institute of Science, where he heads a group that develops
courses in computer science for high school students. He is the author of eleven textbooks on
concurrent computation, programming languages, mathematical logic and nature of science.
Concurrent and distributed programming are no longer the esoteric subjects for
graduate students that they were years ago. Programs today are inherently concurrent
or distributed, from event-based implementations of graphical user interfaces
to operating and real-time systems to Internet applications like multiuser games,
chats and ecommerce. Modern programming languages and systems (including
Java, the system most widely used in education) support concurrent and distributed
programming within their standard libraries. These subjects certainly deserve a
central place in computer science education.
Readme text>> ; 2 KB
Slides in pdf Format>> ; 1.5 MB, 363 slides
Archive of slides and LaTeX>> ; 360 KB
The intended audience includes advanced undergraduate and beginning
graduate students, as well as practicing software engineers interested in obtaining
a scientific background in this field. We have taught concurrency successfully
to high-school students, and the subject is particularly suited to nonspecialists
because the basic principles can be explained by adding a very few
constructs to a simple language and running programs on a concurrency simulator.
While there are no specific prerequisites and the book is reasonably self-contained,
a student should be fluent in one or more programming languages and have a basic
knowledge of data structures and computer architecture or operating systems.
Advanced topics are marked by A. This includes material that requires a degree of
Chapters 1 through 3 and the non-A parts of Chapter 4 form the introductory core
that should be part of any course. I would also expect a course in concurrency
to present semaphores and monitors (Chapters 6 and 7); monitors are particularly
important because concurrency constructs in modern programming languages are
based upon the monitor concept. The other chapters can be studied more or less
independently of each other.
Exercises: The exercises following each chapter are technical exercises intended
to clarify and expand on the models, the algorithms and their proofs. Classical
problems with names like the sleeping barber and the cigarette smoker appear in
Appendix C because they need not be associated with any particular construct for
Supporting material: The companion website contains an archive with the
source code in various languages for the algorithms appearing in the book. Its