Pthreads Programming Contents
  Preface Contents
Example Programs
Typographical Conventions
Chapter 1 - - Why Threads
What Are Pthreads?
Potential Parallelism
Specifying Potential Parallelism in a Concurrent Programming Environment
UNIX Concurrent Programming: Multiple Processes
Pthreads Concurrent Programming: Multiple Threads
Parallel vs. Concurrent Programming
Sharing Process Resources
Who Am I? Who Are You?
Terminating Thread Execution
Exit Status and Return Values
Pthreads Library Calls and Errors
Why Use Threads Over Processes?
A Structured Programming Environment
Choosing Which Applications to Thread
Chapter 2 - - Designing Threaded Programs
Suitable Tasks for Threading
Boss/Worker Model
Peer Model
Pipeline Model
Buffering Data Between Threads
Some Common Problems
Example: An ATM Server
The Serial ATM Server
The Multithreaded ATM Server
Example: A Matrix Multiplication Program
The Serial Matrix-Multiply Program
The Multithreaded Matrix-Multiply Program
Chapter 3 - - Synchronizing Pthreads
Selecting the Right Synchronization Tool
Mutex Variables
Using Mutexes
Error Detection and Return Values
Using pthread_mutex_trylock
When Other Tools Are Better
Some Shortcomings of Mutexes
Contention for a Mutex
Example: Using Mutexes in a Linked List
Complex Data Structures and Lock Granularity
Requirements and Goals for Synchronization
Access Patterns and Granularity
Locking Hierarchies
Sharing a Mutex Among Processes
Condition Variables
Using a Mutex with a Condition Variable
When Many Threads Are Waiting
Checking the Condition on Wake Up: Spurious Wake Ups
Condition Variable Attributes
Condition Variables and UNIX Signals
Condition Variables and Cancellation
Reader/Writer Locks
Synchronization in the ATM Server
Synchronizing Access to Account Data
Limiting the Number of Worker Threads
Synchronizing a Server Shutdown
Thread Pools
An ATM Server Example That Uses a Thread Pool
Chapter 4 - - Managing Pthreads
Setting Thread Attributes
Setting a Thread’s Stack Size
Setting a Thread’s Detached State
Setting Multiple Attributes
Destroying a Thread Attribute Object
The pthread_once Mechanism
Example: The ATM Server’s Communication Module
Keys: Using Thread-Specific Data
Initializing a Key: pthread_key_create
Associating Data with a Key
Retrieving Data from a Key
The Complication with Cancellation
Cancelability Types and States
Cancellation Points: More on Deferred Cancellation
A Simple Cancellation Example
Cleanup Stacks
Cancellation in the ATM Server
Scheduling Pthreads
Scheduling Priority and Policy
Scheduling Scope and Allocation Domains
Runnable and Blocked Threads
Scheduling Priority
Scheduling Policy
Using Priorities and Policies
Setting Scheduling Policy and Priority
Scheduling in the ATM Server
Mutex Scheduling Attributes
Priority Ceiling
Priority Inheritance
The ATM Example and Priority Inversion
Chapter 5 - - Pthreads and UNIX
Threads and Signals
Traditional Signal Processing
Signal Processing in a Multithreaded World
Threads in Signal Handlers
A Simple Example
Some Signal Issues
Handling Signals in the ATM Example
Threadsafe Library Functions and System Calls
Threadsafe and Reentrant Functions
Example of Thread-Unsafe and Threadsafe Versions of the Same Function
Functions That Return Pointers to Static Data
Library Use of errno
The Pthreads Standard Specifies Which Functions Must Be Threadsafe
Using Thread-Unsafe Functions in a Multithreaded Program
Cancellation-Safe Library Functions and System Calls
Asynchronous Cancellation-Safe Functions
Cancellation Points in System and Library Calls
Thread-Blocking Library Functions and System Calls
Threads and Process Management
Calling fork from a Thread
Calling exec from a Thread
Process Exit and Threads
Multiprocessor Memory Synchronization
Chapter 6 - - Practical Considerations
Understanding Pthreads Implementation
Two Worlds
Two Kinds of Threads
Who’s Providing the Thread?
Race Conditions
Event Ordering
Less Is Better
Trace Statements
Debugger Support for Threads
Example: Debugging the ATM Server
The Costs of Sharing Too Much—Locking
Thread Overhead
Synchronization Overhead
How Do Your Threads Spend Their Time?
Performance in the ATM Server Example
Appendix A - - Pthreads and DCE
The Structure of a DCE Server
What Does the DCE Programmer Have to Do?
Example: The ATM as a DCE Server
Appendix B - - Pthreads Draft 4 vs. the Final Standard
Detaching a Thread
Mutex Variables
Condition Variables
Thread Attributes
The pthread_once Function
Threadsafe System Interfaces
Error Reporting
System Interfaces and Cancellation-Safety
Process-Blocking Calls
Process Management
Appendix C - - Pthreads Quick Reference