| |
| |
Preface | |
| |
| |
| |
The Joys of Concurrent Programming | |
| |
| |
What is Concurrency? | |
| |
| |
The Benefits of Parallel Programming | |
| |
| |
The Benefits of Distributed Programming | |
| |
| |
The Minimal Effort Required | |
| |
| |
The Basic Layers of Software Concurrency | |
| |
| |
No Keyword Support for Parallelism in C++ | |
| |
| |
Programming Environments for Parallel and Distributed Programming | |
| |
| |
Summary-Toward Concurrency | |
| |
| |
| |
The Challenges of Parallel and Distributed Programming | |
| |
| |
The Big Paradigm Shift | |
| |
| |
Coordination Challenges | |
| |
| |
Sometimes Hardware Fails and Software Quits | |
| |
| |
Too Much Parallelization or Distribution Can Have Negative Consequences | |
| |
| |
Selecting a Good Architecture Requires Research | |
| |
| |
Different Techniques for Testing and Debugging are Required | |
| |
| |
The Parallel or Distributed Design Must Be Communicated | |
| |
| |
Summary | |
| |
| |
| |
Dividing C++ Programs into Multiple Tasks | |
| |
| |
Process: A Definition | |
| |
| |
Anatomy of a Process | |
| |
| |
Process States | |
| |
| |
Process Scheduling | |
| |
| |
Context Switching | |
| |
| |
Creating a Process | |
| |
| |
Terminating a Process | |
| |
| |
Process Resources | |
| |
| |
What are Asynchronous and Synchronous Processes? | |
| |
| |
Dividing the Program into Tasks | |
| |
| |
Summary | |
| |
| |
| |
Dividing C++ Programs into Multiple Threads | |
| |
| |
Threads: A Definition | |
| |
| |
The Anatomy of a Thread | |
| |
| |
Thread Scheduling | |
| |
| |
Thread Resources | |
| |
| |
Thread Models | |
| |
| |
Introduction to the Pthread Library | |
| |
| |
The Anatomy of a Simple Threaded Program | |
| |
| |
Creating Threads | |
| |
| |
Managing Threads | |
| |
| |
Thread Safety and Libraries | |
| |
| |
Dividing Your Program into Multiple Threads | |
| |
| |
Summary | |
| |
| |
| |
Synchronizing Concurrency between Tasks | |
| |
| |
Coordinating Order of Execution | |
| |
| |
Synchronizing Access to Data | |
| |
| |
What are Semaphores? | |
| |
| |
Synchronization: An Object-Oriented Approach | |
| |
| |
Summary | |
| |
| |
| |
Adding Parallel Programming Capabilities to C++ through the PVM | |
| |
| |
The Classic Parallelism Models Supported by PVM | |
| |
| |
The PVM Library for C++ | |
| |
| |
The Basic Mechanics of the PVM | |
| |
| |
Accessing Standard Input (stdin) and Standard Output (stdout) within PVM Tasks | |
| |
| |
Summary | |
| |
| |
| |
Error Handling, Exceptions, and Software Reliability | |
| |
| |
What is Software Reliability? | |
| |
| |
Failures in Software Layers and Hardware Components | |
| |
| |
Definitions of Defects Depend on Software Specifications | |
| |
| |
Recognizing Where to Handle Defects versus Where to Handle Exceptions | |
| |
| |
Software Reliability: A Simple Plan | |
| |
| |
Using Map Objects in Error Handling | |
| |
| |
Exception Handling Mechanisms in C++ | |
| |
| |
Event Diagrams, Logic Expressions, and Logic Diagrams | |
| |
| |
Summary | |
| |
| |
| |
Distributed Object-Oriented Programming in C++ | |
| |
| |
Decomposition and Encapsulation of the Work | |
| |
| |
Accessing Objects in Other Address Spaces | |
| |
| |
The Anatomy of a Basic CORBA Consumer | |
| |
| |
The Anatomy of a CORBA Producer | |
| |
| |
The Basic Blueprint of a CORBA Application | |
| |
| |
The Naming Service | |
| |
| |
A Closer Look at Object Adapters | |
| |
| |
Implementation and Interface Repositories | |
| |
| |
Simple Distributed Web Services Using CORBA | |
| |
| |
The Trading Service | |
| |
| |
The Client/Server Paradigm | |
| |
| |
Summary | |
| |
| |
| |
SPMD and MPMD Using Templates and the MPI | |
| |
| |
Work Breakdown Structure for the MPI | |
| |
| |
Using Template Functions to Represent MPI Tasks | |
| |
| |
Simplifying MPI Communications | |
| |
| |
Summary | |
| |
| |
| |
Visualizing Concurrent and Distributed System Design | |
| |
| |
Visualizing Structures | |
| |
| |
Visualizing Concurrent Behavior | |
| |
| |
Visualizing the Whole System | |
| |
| |
Summary | |
| |
| |
| |
Designing Components That Support Concurrency | |
| |
| |
Taking Advantage of Interface Classes | |
| |
| |
A Closer Look at Object-Oriented Mutual Exclusion and Interface Classes | |
| |
| |
Maintaining the Stream Metaphor | |
| |
| |
User-Defined Classes Designed to Work with PVM Streams | |
| |
| |
Object-Oriented Pipes and fifos as Low-Level Building Blocks | |
| |
| |
Framework Classes Components for Concurrency | |
| |
| |
Summary | |
| |
| |
| |
Implementing Agent-Oriented Architectures | |
| |
| |
What are Agents? | |
| |
| |
What is Agent-Oriented Programming? | |
| |
| |
Basic Agent Components | |
| |
| |
Implementing Agents in C++ | |
| |
| |
Multiagent Systems | |
| |
| |
Summary | |