Statement of Course Outcomes
Course Number: CS 511
Course Name: Concurrent Programming
Course Coordinator: Dan Duchamp
Graduate or Undergraduate Equivalent:
Catalog Description: The study of concurrency as it appears at all levels and in different types of computing systems. Topics include: models of concurrency; languages for expressing concurrency; formal systems for reasoning about concurrency; the challenges of concurrent programming; race conditions; deadlock; livelock and nondeterministic behavior; prototypical synchronization problems, such as readers-writers and dining philosophers; mechanisms for solution of these problems, such as semaphores, monitors, and conditional critical regions; important libraries for concurrent programming; message passing, both synchronous and asynchronous; and applications of multithreaded concurrent programming and parallel algorithms. Substantial programming required. Prerequisite: CS 385 or CS 590.
Course Outcomes
Each course outcome is followed in parentheses by the Program Outcome to which it relates.
- Explain how preemptive scheduling is implemented by interrupts and context switches. (cs-hardware-interface)
- Explain what a race condition is. (cs-concurrency)
- Explain how preemptive scheduling may cause race conditions to occur. (cs-runtime)
- Explain what mutual exclusion is. (cs-concurrency)
- Explain the necessary conditions for a satisfactory solution to mutual exclusion. (cs-concurrency)
- Explain what a semaphore is and how it is used. (cs-concurrency)
- Explain what a monitor is and how it is used. (cs-concurrency)
- Explain how to achieve mutual exclusion using specialized machine instructions, semaphores, and monitors. (cs-concurrency)
- Explain what barrier synchronization is. (cs-concurrency)
- Explain how to achieve barrier synchronization using semaphores and monitors. (cs-concurrency)
- Explain how to express concurrency in typical imperative and declarative programming languages. (cs-languages)
- Explain how to use messaging and remote procedure call to implement concurrency in non-shared-memory (i.e., distributed) systems. (cs-concurrency)
- Explain the meaning of partial correctness and liveness. (cs-math-stat)
- Explain the difference between data-parallel and task-parallel problems. (cs-concurrency)
- Implement solutions to standard synchronization problems using the C/C++ Pthreads library on UNIX. (cs-concurrency)
- Implement solutions to standard synchronization problems using Java's util.concurrent package. (cs-concurrency)
- Explain the concept of an atomic transaction. (cs-concurrency)
- Explain the concept of serializability and how it is implemented in database systems. (cs-concurrency)
- Explain how to model and analyze a concurrent system using state models. (cs-math-stat)