Ada Home
December 14, 1997
reviewed by Pat Rogers
progers@acm.org
Written by acknowledged experts in both real-time and concurrent programming, Concurrency in Ada is a comprehensive, well-ordered, highly readable examination of the Ada 95 tasking facilities. Every essential subject related to tasking is thoroughly examined, including the pertinent annexes, to a depth not feasible in texts covering the entire language. More than just a detailed tasking examination, however, the book offers many examples of usage and analysis of feature interaction that only these two authors could provide. Combined with the thoroughness of explanation, this analysis provides a resource that every serious Ada user should have.
The book lays the foundation for an appreciation of the Ada facilities with an introduction to concurrent programming, in which the difficulties of synchronization and communication inherent in multiprocessing systems are illustrated. The Ada process (i.e. task) model is then examined in detail, followed by the data-oriented synchronization facility of protected types. Note that some familiarity with the sequential portion of Ada 95 is assumed, although a brief overview of the language is provided in the first chapter.
Previous papers by these and other authors have pointed out a relative lack of expressive power of parts of the Ada 83 tasking interaction model. Termed avoidance synchronization, this relative lack has been addressed by the new requeue mechanism, and the authors provide both the rationale and detailed explanation necessary for proper usage.
As an example of the value of the book, a chapter is dedicated to using protected types to build a number of abstractions defined by the ARTEWG CIFO (Ada Run Time Environment Working Group's Catalog of Interface Features & Options). Complete source code is provided to create semaphores, signals, buffers, events, and blackboards, among other examples illustrating the power of the new facilities.
The new, somewhat controversial asynchronous task interaction mechanism is then reviewed, including both illustrations of use and subtleties to watch out for. This chapter is a prime example of the analysis of language facility interactions provided by the book. Task abort and exceptions are also considered in the context of asynchronous interactions.
Another prime analysis example is that of the interaction of the concurrent programming and object-oriented programming facilities. No other Ada textbook has provided this degree of illumination of the possibilities and limitations encountered when combining the two capabilities.
Finally, all three pertinent annexes are examined. The new interrupt handling model is covered in the Systems Programming Annex review, as well as task identifiers and per-task data. In combination with the facilities provided by the Real-Time Systems Annex, these new features are put to use in the creation of user-defined schedulers. Of course, predefined schedulability analysis support is covered, as is the capability for bot synchronous and asynchronous task control. Following an overview of the distribution model provided by the Distributed Systems Annex, a number of distributed programming paradigms are presented using the model provided.
The book closes with a review of the language changes brought to Ada and discusses how and why they were or were not complete. Flaws are not discounted and those areas affected by constraints placed upon the language revision team are not ignored.
In summary, the breadth and depth of examination, coupled with the unique analysis of feature interaction make this an essential textbook for those contemplating use of Ada tasking. Put another way, this reviewer has approximately thirty textbooks on the Ada language. I wouldn't do without this one.
Table of Contents ----------------- Foreword Preface 1. The Ada Language 2. The Nature and Uses of Concurrent Programming 3. Inter-Process Communication 4. Ada Task Types and Objects 5. The Rendezvous 6. The Select Statement and the Rendezvous 7. Protected Objects and Data-Oriented Communication 8. Avoidance Synchronisation and the Requeue Facility 9. Using Protected Objects as Building Blocks 10. Exceptions, Abort and Asynchronous Transfer of Control 11. Tasking and Systems Programming 12. Real-Time Programming 13. Object-Oriented Programming and Tasking 14. Distributed Systems 15. Conclusion Index
This book and other Ada books can be ordered on-line from the Ada Home Bookshop, in the General Ada section. |
See also:
The text of this review was first published in Ada Letters, vol. XVII, no. 6, Nov/Dec 1997.
Page last modified: 1998-02-09