Linux/UNIX Threads and IPC Programming course outline
 
        - Threads: Introduction
            
                - Overview of threads
- Pthreads API basics
- Thread creation and termination
- Thread IDs
- Joining and detaching threads
- Thread attributes
- Signals and threads
- Threads and process control
 
- Threads: Synchronization
            
                - Shared resources and critical sections
- Mutexes
- Locking and unlocking a mutex
- Condition variables
- Signaling and waiting on condition variables
- Further details on signaling condition variables
- Dynamically initialized synchronization primitives
- Other synchronization primitives
 
- IPC: Introduction and Overview (*)
            
                - Categorizing IPC
- Choosing an IPC mechanism
 
- Pipes and FIFOs
            
                - Creating and using pipes
- FIFOs
- Connecting filters with pipes
 
- Sockets: Introduction
            
                - Socket types and domains
- Creating and binding a socket (socket() and bind())
- Overview of stream sockets
- listen() and pending connections
- accept() and connect()
- I/O on stream sockets
- Overview of datagram sockets
- I/O on datagram sockets
 
- UNIX Domain Sockets
            
                - UNIX domain stream sockets
- UNIX domain datagram sockets
- Further details of UNIX domain sockets
 
- Internet Domain Sockets
            
                - Internet domain sockets
- Data-representation issues
- Presentation-format addresses
- Loopback and wildcard addresses
- Internet domain stream sockets example
 
- Internet Domain Sockets: Address Conversion
            
                - Host addresses and port numbers
- Host and service conversion
- Internet domain sockets example with getaddrinfo()
 
- Sockets: Further Details
            
                - Socket shutdown (shutdown())
- Socket options
- TCP TIME-WAIT state and SO_REUSEADDR
 
- Alternative I/O Models
            
                - Nonblocking I/O
- Signal-driven I/O
- I/O multiplexing: poll()
- Event-loop programming
 
- Alternative I/O Models: epoll
            
                - Problems with poll() and select()
                
- The epoll API
		
- Creating an epoll instance: epoll_create()
		
- Populating the interest list: epoll_ctl()
                
- epoll events
		
- Waiting for events: epoll_wait()
                
- Performance considerations
                
- Edge-triggered notification
                
- epoll API quirks
            
 
- POSIX Semaphores
            
                - Named semaphores
- Semaphore operations
- Unnamed semaphores
 
- POSIX Shared Memory
            
                - Creating and opening shared memory objects
- Using shared memory objects
- Synchronizing access to shared memory
 
    (*) Topics marked with an asterisk will be covered subject to time
    constraints.