This is the simulator edition of the skill: there are no real threads and no timing. A thread is a short list of steps, a schedule says whose step runs next, and the machine you write executes them, so a concurrency bug becomes a list of thread numbers you can print and replay. Each lecture teaches one idea with small examples and their output, then a graded lab extends the same machine. You learn to see how an interleaving loses an update, to enumerate every schedule of a small program, to state what a lock-free queue guarantees, and to prove an invariant of a fan-out of market data over every schedule.
Comfort with Python functions, lists and dictionaries is enough; no C or C++ is needed, because the machine is a simulator you write. The cache-locality skill helps with the false-sharing and cache-line ideas but is not required.