CS 361 Concurrent Programming - Syllabus

Term and Credits

Fall 2021-2022
3 Credits

Room and Time

Section 001 - TR 2:00PM-3:20PM Prof. Boady [3675 Market Street Room 1053]

Instructor

Mark Boady
Electronic Mail Address: mwb33@drexel.edu
Office: 3675 Market Street Room 1058 (near snack machine)
Extention: 215-895-2347
Office Hours: Tuesday/Thursday 3:30-4:30PM (If you want to zoom instead of come to my office send me a message first.)

Teaching Assistant(s)

Sergey Mattskevich
Electronic Mail Address: sm3372@drexel.edu
Office: CLC 3675 Market Room 1066
Office Hours: Monday 4:00-6:00PM
Friday 10:00AM-12:00PM

Course Description

Covers programming of concurrent, cooperating sequential processes. Studies race conditions, critical sections, mutual exclusion, process synchronization, semaphores, monitors, message passing, the rendezvous, deadlock, and starvation.

Course Objective and Goals

  1. Acquaint you with the general principles of concurrent programming and the concepts and basic algorithms for cooperating sequential processes and threads such as locks, semaphores, monitors, lock-free techniques, and message passing. The course expects students to attain proficiency with the terminology of concurrent programming.
  2. Handle the more practical aspects of developing correct and efficient multi-threaded or multi-process programs in a variety of languages while doing applied problem-solving. This is a balance between having the time to learn idiomatic programming and software development in a primary language and being able to develop generalized expertise that can be transferred to work in multiple languages. Students are expected to be able to design and implement multithreaded concurrent programs that require significant amounts of control and coordination between threads, while achieving good performance in multicore/multiprocessor environments.
  3. Achieving "deeper understanding": Being able to talk about concurrency situations using abstraction and abstract (formal logic) reasoning. Knowing enough about the subject to be able to transfer your learning to new situations: new problems, different programming languages, or using reading experimentation and reflection to grow your learning as concurrent technology evolves. Establishing correctness and good performance for concurrent programs can confound efforts without such understanding since matters can often be much more complicated than in sequential programs.

Topics

  1. Computer architecture concepts that support concurrency: review of threads, and processes.
  2. Shared Memory with multi-threaded computation: Race Conditions, Mutual Exclusion with locks. Volatile variables in Java.
  3. Hardware support for locking software.
  4. Proof techniques for correctness. Temporal logic notation.
  5. Semaphores
  6. Classic Concurrency Problems
  7. Monitors, equivalence of semaphores and monitors.
  8. Model checking.
  9. Multi-process or distributed concurrency through message passing.
  10. Concurrent and parallel performance: non-blocking lock-free and wait-free methods.

Audience and Purpose within Plan of Study

Students who take this course will learn how to develop good quality multi-threaded and parallel software. There are many application areas (mobile, gaming, operating systems) where knowledge of how to properly use concurrency is essential. However, the thorniness of figuring out what a concurrent program is allowing and disallowing undesirable execution paths means learning more than how to invoke a few new control statements or code libraries. This is an area where a programmer's ability to explain "why it works" is important as the inventiveness to generate a program that specifies "how it works". In order to write code that works, students of concurrent programming need learn and master new ways of understanding the behavior of programs. This requires some rigor, reliance on abstraction, and attention to detail and form. We try to make this accessible and as non-scary as we can, but there’s no avoiding the learning effort. If you don't have a minimum of five hours outside of class every week to work on this course, our experience with your predecessors indicates that you'll have a hard time getting past the minimum requirements. "Work hard just before the assignments are due" isn't usually sufficient.

Prerequisites
This subject benefits from the abilities to creatively use the software development and mathematical tools that students know as advanced undergraduates: CS260 (minimum Grade D), CS281 (minimum Grade D) or CS283, or equivalents, CS 270 (logic and proof from Mathematical Foundations of Computer Science).

What Students Should Know Prior to this Course

  1. Students will be able to design, implement, and test multi-threaded applications that meet performance and correctness expectations for good quality, and be able to transfer such expertise to new languages.
  2. Students will be able to write applications in which threads or processes coordinate in the presence of dependencies, and be able to transfer such expertise to new languages.
  3. Students will be able to prove the correctness of simple concurrent algorithms using logic and through model checking, and be able to transfer such expertise to new languages.
  4. Students will be able to assess performance and make appropriate design and implementation decisions for multi-threaded or multi-process programs, and be able to transfer such expertise to additional programming languages.
  5. Students should also be able to extend their knowledge about concurrency incrementally in a straightforward fashion, having acquired the fundamental building blocks for understanding and learning about concurrency in this course.
  6. Students will be able to communicate their explanations and justifications for their concurrent programs effectively to others with a comparable background.

What Students will be able to do upon Successfully Completing this Course: Statement of Expected Learning

  1. Students will be able to analyze data structures.
  2. Students will understand a set of fundamental algorithms and how to apply them.
  3. Students will understand basic data structures and how to apply them to different situations.
  4. Familiar with basic data structures and be able to create data structures.

Textbook

C++ Concurrency in Action (Second Edition)
Author: Anthony Williams
Published: February 10, 2019
ISBN-10: 1617294691
ISBN-13: 978-1617294693
Buy from Amazon

Grading and Policies

Final grades will be determined by your total points weighted according to this distribution. Grades may be curved but are generally computed via the formula below. It may be modified at the instructor's sole discretion, but letter grades will generally not be lower than those shown here.

Course Material

Late Policy

Academic Honesty Policy

The CCI Academic Honesty policy is in effect for this course. Please see the policy at http://drexel.edu/cci/resources/current-students/undergraduate/policies/cs-academic-integrity/.

Academic Honesty Violations will be reported to the University. Punishment will be determined by the severity of the incident. Punishments include, but are not limited to,


Components

Blogs

You will be assigned readings and need to complete blogs discussing the topic of the reading. You will need to comment on two other student's blogs.

Homework Assignments

There will be one homework assignment per week. It will normally contain multiple components. Some programming and some written.

Assessments

There will be two self assessments during week 6 and 11. You will answer a series of essay questions about content in the class so far. You will propose a letter grade for your progress and skill on the material.

Discord Channel


University Policies
In addition to the course policies listed on this syllabus, course assignments or course website, the following University policies are in effect:

Appropriate Use of Course Materials

It is important to recognize that some or all of the course materials provided to you are the intellectual property of Drexel University, the course instructor, or others. Use of this intellectual property is governed by Drexel University policies, including the IT-1 policy found at: https://drexel.edu/it/about/policies/policies/01-Acceptable-Use/
Briefly, this policy states that all course materials including recordings provided by the given prior written approval by the University. Doing so may be considered a breach of this policy and will be investigated and addressed as possible academic dishonesty, among other potential violations. Improper use of such materials may also constitute a violation of the University's Code of Conduct found at: https://drexel.edu/cpo/policies/cpo-1/ and will be investigated as such.

Recording of Class Activities:

In general, students and others should not record course interactions and course activities in lecture, lab, studio or recitation.
Students who have an approved accommodation from the Office of Disability Resources to record online lectures and discussions for note taking purposes should inform their course instructor(s) of their approved accommodation in advance. The recording of lectures and discussions may only be carried out by the students enrolled in the class who have an approved accommodation from Disability Resources with their instructors' prior knowledge and consent. Students with approved accommodations may be asked to turn off their recorder if confidential or personal information is presented.
If a student has any comments, concerns, or questions about provided class materials and/ or recording, talk to your course instructor first. If this does not resolve the issue, you can also reach out to the Department Head, and use the process described for a grade appeal to move your concern forward. The process described for grade appeals can be found at: https://drexel.edu/provost/policies/grade-appeals/

Mask Etiquette for the 2021 Fall Quarter

As of August 3, 2021, Drexel requires all students and employees to wear a mask in all on-campus public and shared spaces, including instructional and research settings, regardless of vaccination status. Specifically, masks are to be worn in classrooms, laboratories, lecture halls and seminar rooms. Students are not permitted to eat during class or otherwise remove their mask. If a student needs to remove their mask (to drink water etc.) they may step outside the class, to do so and then return to class. Please remember your mask to avoid class disruption.

If a student does not wear a mask or follow other required health and safety guidelines in the classroom, the instructor will take the following steps:

As members of the Drexel community, we all play a role in supporting our collective health and safety, and I appreciate your collaboration and commitment to this. If you have questions or concerns about masking in class, please do not hesitate to ask. More information about masking is available at the link above and on the Drexel Response to Coronavirus website.

Tentative Course Schedule

Please see the appropriate assignment webpages for a detailed description of course deliverables.

Week Topic Assignments
1 (September 20, 2021) Basic Structures of Concurrency Blog 1 - Due Tuesday 9/21 at 11:59PM
Blog 1 Comments - Due Thursday 9/23 at 11:59PM
Assignment 1 - Due Monday 9/27 at 11:59PM
2 (September 27, 2021) Managing Threads Blog 2 - Due Tuesday 9/28 at 11:59PM
Blog 2 Comments - Due Thursday 9/30 at 11:59PM
Assignment 2 - Due Monday 10/4 at 11:59PM
3 (October 4, 2021) Sharing Data Between Threads Blog 3 - Due Tuesday 10/5 at 11:59PM
Blog 3 Comments - Due Thursday 10/7 at 11:59PM
Assignment 3 - Due Tuesday 10/12 due to holiday at 11:59PM
4 (October 11, 2021)
[Indigenous Peoples' Day]
Synchronizing Concurrent Operation Blog 4 - Due Tuesday 10/12 at 11:59PM
Blog 4 Comments - Due Thursday 10/14 at 11:59PM
Assignment 4 - Due Monday 10/18 at 11:59PM
5 (October 18, 2021) C++ Memory Model and Operations on Atomic Types Blog 5 - Due Tuesday 10/19 at 11:59PM
Blog 5 Comments - Due Thursday 10/21 at 11:59PM
Assignment 5 - Due Monday 10/25 at 11:59PM
6 (October 25, 2021) Designing Lock-Based Concurrent Data Structures Blog 6 - Due Tuesday 10/26 at 11:59PM
Blog 6 Comments - Due Thursday 10/28 at 11:59PM
Midterm Assessment - Due Monday 11/1 at 11:59PM
7 (November 1, 2021) Designing Lock-Free Concurrent Data Structures Blog 7 - Due Tuesday 11/2 at 11:59PM
Blog 7 Comments - Due Thursday 11/4 at 11:59PM
Assignment 6 - Due Monday 11/8 at 11:59PM
8 (November 8, 2021) Designing Concurrent Code Blog 8 - Due Tuesday 11/9 at 11:59PM
Blog 8 Comments - Due Thursday 11/11 at 11:59PM
Assignment 7 - Due Monday 11/15 at 11:59PM
9 (November 15, 2021) Advanced Thread Management Blog 9 - Due Tuesday 11/16 at 11:59PM
Blog 9 Comments - Due Thursday 11/18 at 11:59PM
Assignment 8 - Due Monday 11/29 at 11:59PM
10 (November 22, 2021)
[Thanksgiving Week]
No Class Happy Holidays!
11 (November 29, 2021) Parallel Algorithms Blog 10 - Due Tuesday 11/30 at 11:59PM
Blog 10 Comments - Due Thursday 12/2 at 11:59PM
Assignment 9 - Due Monday 12/6 at 11:59PM
11 (December 6, 2021) Final Assessment - Due Friday December 10, 2021 at 11:59PM