Fully harnessing multi-core processors requires concurrent programming, yet most mainstream languages have little support or do so with poor portability. Well-written concurrent Ada programs can be extremely portable and support multi-core and multiple processors automatically. This book explores, in-depth, the concurrent programming ("tasking") part of the Ada language. The authors then show how the concurrent programming facilities of Ada are augmented by the language to support real-time programming. These standard real-time facilities are state-of-the-art, extending, for example, beyond the POSIX real-time facilities in their expressive power.
The book first establishes the necessary foundation for understanding concurrent programming by explaining the possible problems (e.g., deadlocks and race conditions) and highlighting some of the mechanisms traditionally used in concurrent programming, such as semaphores and message-passing.
The tasking part of Ada is then covered in full detail, necessarily including interactions with some other parts of the language, such as exceptions, but also including interactions with the Ada object-oriented language facilities. The implementations of a number of reusable concurrency abstractions serve to illustrate the use of the tasking features.
The authors next lay another foundation, this time for scheduling in real-time systems, and show how Ada directly supports the common approaches. Both fixed-priority and dynamic-priority dispatching are supported by Ada and these are covered in detail. Ada 2005 also defines a number of time-related abstractions, such as a monotonic clock and timing events, and these are also covered completely. As in the concurrent programming part of the book, a number of reusable abstractions are implemented; in this section they illustrate the real-time language facilities. A discussion of the popular Ravenscar Profile, adopted by some other languages, is included.
No language is perfect and Ada is no exception. The tasking part of Ada 83 was particularly controversial in the domain of real-time systems. Ada 95 addressed many of these issues and added some new ones. Ada 2005 does the same. These issues are not ignored in the book.
I own 46 books on Ada (not counting older editions of some of them), gathered over 27 years of applying the language. Some are excellent and some not, but this one is highly prized. I highly recommend it to professionals and students alike.