Foreword -- Preface -- 1. Parallelism and programming: a perspective -- 2. A programming notation -- 3. A programming logic -- 4. Architectures and mappings -- 5. The first case study: shortest path -- 6. Toy examples -- 7. Program structuring -- 8. Communicating processes -- 9. Termination detection -- 10. Global snapshots -- 11. Stability detection -- 12. Dining philosophers -- 13. Drinking philosophers -- 14. Committee coordination -- 15. Mutual exclusion -- 16. Parallel garbage collection -- 17. Fault tolerance: a protocol for communication over faulty channels -- 18. Fault tolerance: byzantine agreement -- 19. Sorting -- 20. Combinatorial search -- 21. Systolic arrays as programs -- 22. Alternate programming models -- Epilog: thoughts on programming -- Bibliography -- Index