1 On Our Computational Model.- 2 Our Program Notation and Its Semantics.- 3 The Core of the Owicki/Gries Theory.- 4 Two Disturbing Divergences.- 5 Bridling the Complexity.- 6 Co-assertions and Strengthening the Annotation.- 7 Three Theorems and Two Examples.- 8 Synchronization and Total Deadlock.- 9 Individual Progress and the Multibound.- 10 Concurrent Vector Writing.- 11 More Theorems and More Examples.- 12 The Yellow Pages.- 13 The Safe Sluice.- 14 Peterson's Two-Component Mutual Exclusion Algorithm.- 15 Re-inventing a Great Idea.- 16 On Handshake Protocols.- 17 Phase Synchronization for Two Machines.- 18 The Parallel Linear Search.- 19 The Initialization Protocol.- 20 Co-components.- 21 The Initialization Protocol Revisited.- 22 The Non-Blocking Write Protocol.- 23 Mutual Inclusion and Synchronous Communication.- 24 A Simple Election Algorithm.- 25 Peterson's General Mutual Exclusion Algorithm.- 26 Monitored Phase Synchronization.- 27 Distributed Liberal Phase Synchronization.- 28 Distributed Computation of a Spanning Tree.- 29 Shmuel Safra's Termination Detection Algorithm.- 30 The Alternating Bit Protocol.- 31 Peterson's Mutual Exclusion Algorithm Revisited.- 32 Epilogue.- References.
Here, the authors propose a method for the formal development of parallel programs - or multiprograms as they prefer to call them. They accomplish this with a minimum of formal gear, i.e. with the predicate calculus and the well- established theory of Owicki and Gries. They show that the Owicki/Gries theory can be effectively put to work for the formal development of multiprograms, regardless of whether these algorithms are distributed or not.
Even with all the interest in parallelism and parallel processing, there is still something missing. This book is about how to design parallel programs from their specification. It follows from the Owicki/Gries theory and can be put to work for the formal development of multiprograms regardless of whether these algorithms are distributed or not.