Parallel and Distributed Programming Using C++ provides an up-close look at how to build software that can take advantage of multiprocessor computers. Simple approaches for programming parallel virtual machines are presented, and the basics of cluster application development are explained. Through an easy-to-understand overview of multithreaded programming, this book also shows you how to write software components that work together over a network to solve problems and do work.
Parallel and Distributed Programming Using C++ provides an architectural approach to parallel programming for computer programmers, software developers, designers, researchers, and software architects. It will also be useful for computer science students.Demonstrates how agents and blackboards can be used to make parallel programming easierShows object-oriented approaches to multitasking and multithreadingDemonstrates how the UML is used to document designs that require parallel or distributed programmingContains the new POSIX/UNIX IEEE Standard for the Pthreads library
Parallel and Distributed Programming Using C++ provides an up-close look at how to build software that can take advantage of multiprocessor computers. Simple approaches for programming parallel virtual machines are presented, and the basics of cluster application development are explained. Through an easy-to-understand overview of multithreaded programming, this book also shows you how to write software components that work together over a network to solve problems and do work.
Parallel and Distributed Programming Using C++ provides an architectural approach to parallel programming for computer programmers, software developers, designers, researchers, and software architects. It will also be useful for computer science students.Demonstrates how agents and blackboards can be used to make parallel programming easierShows object-oriented approaches to multitasking and multithreadingDemonstrates how the UML is used to document designs that require parallel or distributed programmingContains the new POSIX/UNIX IEEE Standard for the Pthreads library
Preface.
1. 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.
2. 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.
3. 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.
4. 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.
5. Synchronizing Concurrency between Tasks.
Coordinating Order of Execution. Synchronizing Access to Data. What
are Semaphores? Synchronization: An Object-Oriented Approach.
Summary.
6. 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.
7. 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.
8. 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.
9. 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.
10. Visualizing Concurrent and Distributed System
Design.
Visualizing Structures. Visualizing Concurrent Behavior.
Visualizing the Whole System. Summary.
11. 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.
12. Implementing Agent-Oriented Architectures.
What are Agents? What is Agent-Oriented Programming? Basic Agent
Components. Implementing Agents in C++. Multiagent Systems.
Summary.
13. Blackboard Architectures Using PVM, Threads, And C++
Components.
The Blackboard Model. Approaches to Structuring the Blackboard. The
Anatomy of a Knowledge Source. The Control Strategies for
Blackboards. Implementing the Blackboard Using CORBA Objects.
Implementing the Blackboard Using Global Objects. Activating
Knowledge Sources Using Pthreads. Summary.
Appendix A.
Class and Object Diagrams. Interaction Diagrams. State Diagrams.
Package Diagrams.
Appendix B.
Bibliography.
Index.
Today, the C++ language remains one of the most important languages used by professional software developers. Many corporations and government agencies have large investments in applications that are developed using the C++ language. Those corporations and government agencies are now Web-enabling their applications. Applications that were originally developed as simple client/server now requires Internet/Intranet face-lifts. This book helps software developers and programmers who need to add the techniques of parallel and distributed programming to existing applications. Parallel programming uses multiple computers, or computers with multiple internal processors, to solve a problem at a greater computational speed than using a single computer. It also offers the opportunity to tackle larger problems; that is, problems with more computational steps or more memory requirements.
CAMERON HUGHES is a senior software engineer for CTEST Laboratories and a staff programmer/analyst at Youngstown State University. He has been involved in software development efforts of all sizes and is currently working in cluster programming of the Proteus V that involves NLP and knowledge representation modeling at CTEST and the Colony at Youngstown.
TRACEY HUGHES is a software engineer at CTEST, where she does graphics programming and simulation in C++ and develops image processing class libraries and virtual worlds.
Together they are the co-authors of numerous books including Linux Rapid Application Development and Object-Oriented Multithreading Using C++.
![]() |
Ask a Question About this Product More... |
![]() |