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.


  1. Explain how preemptive scheduling is implemented by interrupts and context switches. (cs-hardware-interface)
  2. Explain what a race condition is. (cs-concurrency)
  3. Explain how preemptive scheduling may cause race conditions to occur. (cs-runtime)
  4. Explain what mutual exclusion is. (cs-concurrency)
  5. Explain the necessary conditions for a satisfactory solution to mutual exclusion. (cs-concurrency)
  6. Explain what a semaphore is and how it is used. (cs-concurrency)
  7. Explain what a monitor is and how it is used. (cs-concurrency)
  8. Explain how to achieve mutual exclusion using specialized machine instructions, semaphores, and monitors. (cs-concurrency)
  9. Explain what barrier synchronization is. (cs-concurrency)
  10. Explain how to achieve barrier synchronization using semaphores and monitors. (cs-concurrency)
  11. Explain how to express concurrency in typical imperative and declarative programming languages. (cs-languages)
  12. Explain how to use messaging and remote procedure call to implement concurrency in non-shared-memory (i.e., distributed) systems. (cs-concurrency)
  13. Explain the meaning of partial correctness and liveness. (cs-math-stat)
  14. Explain the difference between data-parallel and task-parallel problems. (cs-concurrency)
  15. Implement solutions to standard synchronization problems using the C/C++ Pthreads library on UNIX. (cs-concurrency)
  16. Implement solutions to standard synchronization problems using Java's util.concurrent package. (cs-concurrency)
  17. Explain the concept of an atomic transaction. (cs-concurrency)
  18. Explain the concept of serializability and how it is implemented in database systems. (cs-concurrency)
  19. Explain how to model and analyze a concurrent system using state models. (cs-math-stat)