Every developer will, at some point, be faced with multi-threaded code. This inevitably means race conditions, data corruption, and deadlocks. In this session, we’ll take a deep dive into what’s actually going on at the compiler and processor level, and look at the low level building blocks of multi-threaded programming. We’ll see how to use these building blocks to write lock-free code, and how the CLR uses them. We’ll then step up to the application level, and explore some design patterns and tips for writing, understanding and debugging multi-threaded programs.