Libraries for Parallel and Distributed Programming
The MPICH, an implementation of MPI, the PVM library, and the
Pthreads (POSIX Threads) library, are used to implement parallel
programming using C++. MICO, a C++ implementation of the CORBA
standard, is used to achieve distrbuted programming. The C++
Standard Library, in combination with CORBA and the Pthreads
library, provides the support for
The New Single UNIX Specification Standard
The new Single UNIX Specification Standard, Version 3, a joint effort between IEEE and the Open Group, was finalized and released in December 2001. The new Single UNIX Specification encompasses the POSIX standards and promotes portability for application programmers. It was designed to give software developers a single set of APIs to be supported by every UNIX system. It provides a reliable road map of standards for programmers who need to write multitasking and multithreading applications. In this book we rely on the Single UNIX Specification Standard for our discussions on process creations, process management, the Pthreads library, the new posix_spawn() routines, the POSIX semaphores, and FIFOs. Appendix B in this book contains excerpts from the standard that can be used as a reference to the material that we present.
Who is This Book For?
This book is written for software designers, software developers, application programmers, researchers, educators, and students who need an introduction to parallel and distributed programming using the C++ language. A modest knowledge of the C++ language and standard C++ class libraries is required. This book is not intended as a tutorial on programming in C++ or object-oriented programming. It is assumed that the reader will have a basic understanding of object-oriented programming techniques such as encapsulation, inheritance, and polymorphism. This book introduces the basics of parallel and distributed programming in the context of C++.
Development Environments Supported
The examples and programs presented in this book were developed
and tested in the Linux and UNIX environments,
Many of the diagrams in this book use the UML (Unified Modeling Language) standard. In particular, activity diagrams, deployment diagrams, class diagrams, the state diagrams are used to describe important concurrency architectures and class relationships. Although a knowledge of the UML is not necessary, familarity is helpful. Appendix A contains an explanation and description of the UML symbols and language that we use in this book.
Each complete program in the book is accompanied by a program
profile. The profile will contain implementation specifics such as
headers required, libraries required, compile instructions, and
link instructions. The profile also includes a Notes section that
will contain any special considerations that need to be taken when
executing the program. Code that is not accompanied by a profile is
We made every attempt to stay away from notation that is too theoretical for a introductory book such as this one. However, in some cases the theoretical or mathematical notation was unavoidable. In those cases we use the notation but we provide a detailed explanation of the notation in a sidebar.
Testing and Code Reliability
Although all examples and applications in this book were