Выложил лекцию по многопоточным очередям на английском языке.
https://www.youtube.com/watch?v=86aNZgS9SOU
В этой лекции мы завершаем обсуждение lock-based примитивов синхронизации в C++ и подводим итог всему, что связано с классическим многопоточным программированием на мьютексах и condition variables. Мы рассмотрим producer–consumer паттерн, реализуем ограниченные MPMC-структуры (стек и очередь), разберём типичные проблемы таких решений и попробуем их исправить. Отдельно обсудим, почему даже "правильные" на первый взгляд интерфейсы могут приводить к потере задач. Далее перейдём к более выразительным механизмам коммуникации между потоками: future/promise, обработке исключений, packaged_task и std::jthread. Посмотрим, как современные абстракции позволяют писать более чистый и безопасный код. В завершение попробуем объединить всё вместе и построить очередь с произвольными задачами.
Timeline
00:00 Введение. Ментальная модель мьютекса.
06:33 Thread-Safe Lock-Based Bounded MPMC Stack.
11:01 Измеряем производительность и обнаруживаем проблему.
18:00 Пробуем пофиксить проблему: Wake and Done.
22:30 Thread-Safe Lock-Based Bounded MPMC Queue.
29:00 Критика интерфейса: очередь, которая не может не терять задачи.
33:46 Что если мы позволим неограниченный размер?
36:52 Возврат данных из потока и механизм future/promise.
42:45 Обработка исключений в потоках.
46:43 Packaged Tasks and Joinable Threads.
51:28 Проблема постановки барьера.
57:46 MPMC Queue с произвольными задачами.
01:03:26 Задача на подумать и список литературы.
#cpp_postgraduate
Post #356
10K
- 🔥 38
- 👍 10
- ❤ 6
- 💩 1