We’re often told that message passing is better than sharing the memory and protecting it with critical sections. But why? Can’t we just use lock keyword and call it a day? What can go wrong?
In this talk we’ll dwell into concurrency primitives to understand how they work and what risks they bring. We’ll understand async magic. Finally, we’ll build a couple of custom primitives, for both non-async and async world in C#. There will be quite a lot of interlocked operations, memory mapping, and observing how pieces flow between threads.