Выложил вторую лекцию по атомикам на английском языке.
https://youtu.be/hikc1u-zOhQ
Во второй лекции по атомикам мы в основном сосредоточимся на моделях памяти в C++ и на том, как они соотносятся с реальной аппаратурой. Поговорим про переупорядочивание, happens-before и о том, почему без этого невозможно понять поведение многопоточного кода. Подробно рассмотрим модели памяти для атомиков и покажем, как relaxed легко приводит к неожиданным эффектам и даже UB, а также где он действительно полезен. Детально разберём барьеры памяти -- как они работают и как их можно воспроизводить вручную. Отдельно обсудим, почему атомики иногда тяжелее, чем кажется, и как атомики в C++ конкурируют с инлайн-ассемблером. В конце познакомимся с "теорией относительности" и разберём последовательные и непоследовательные модели.
Timeline
00:00 Начало. Переупорядочение повсюду.
09:15 Модели памяти в аппаратуре.
15:40 Отношение "happens after / before" в C++ и его корни.
21:05 Модели памяти атомиков в C++. Когда relaxed ведёт к UB.
29:09 Барьеры своими руками
36:25 Соревнуемся с инлайн-ассемблером.
41:12 Теория относительности.
47:33 Немного про Multithread COW Disease, литература и завершение.
#cpp_postgraduate
Post #364
10.6K