Магистерский курс C++ (МФТИ, 2022-2023). Лекция 19. Многопоточность, часть 1.

  Рет қаралды 9,417

Konstantin Vladimirov

Konstantin Vladimirov

Күн бұрын

Лекции в магистратуре МФТИ по современному C++ на русском языке. Кафедра микропроцессорных технологий.
На этой лекции мы выходим на коду нашего курса: многопоточность во всех её проявлениях. Начнём мы с грунтования фундамента и разбора простых и фундаментальных вещей. Что такое область памяти? Что такое поток? Что такое гонка? Зачем нужен volatile? Что такое безопасность относительно многопоточности? Мы ответим на все эти вопросы. Также мы разберём основные проблемы проектирования для многопоточной безопасности: API races и deadlocks.
Лектор: Константин Владимиров.
Дата лекции: 15 марта 2023 года.
Съёмка и звук: Юлий Тарасов.
Предыдущая лекция: • Магистерский курс C++ ...
Следующая лекция: • Магистерский курс C++ ...
Слайды ко всем лекциям: sourceforge.net/projects/cpp-...
Примеры кода ко всем лекциям: github.com/tilir/cpp-masters
Timeline
00:00 Потоки исполнения
09:42 Области памяти и гонка
15:35 Volatile
27:20 Правила гонки и pthread
36:15 Мьютексы и их тонкости
46:20 Интермедия: безопасность исключений
54:05 Безопасность относительно потоков
01:00:30 API races
01:08:10 Deadlocks
01:14:20 Завершение
Errata
* Пока пусто

Пікірлер: 26
@vecherinsky
@vecherinsky 11 ай бұрын
59:28 еще ни разу нас так жестко не разводили на этом курсе 😆 огромное спасибо за труд, Константин!
@keesaev320
@keesaev320 Жыл бұрын
Лучший
@makaedg
@makaedg Жыл бұрын
Спасибо за лекцию! Кстати было бы интересно послушать про случайные числа, спектральные характеристики и энтропию
@tilir
@tilir Жыл бұрын
Хорошая идея для спешала. Я кое-что про это знаю.
@artemrusinov3034
@artemrusinov3034 Жыл бұрын
Спасибо! Все очень четко и понятно
@sergeygrechishnikov282
@sergeygrechishnikov282 Жыл бұрын
Константин спасибо вам за лекцию 👍 Надеюсь в дальнейшем будет рассмотрена тема отладки и поиска ошибок в конкурентных приложениях.
@tilir
@tilir Жыл бұрын
Да в следующий раз я поставлю эту задачу и расскажу несколько решений. Но они если что будут неутешительными. Простого способа нет.
@sergeygrechishnikov282
@sergeygrechishnikov282 Жыл бұрын
@@tilir Спасибо. Я понимаю что они будут сложными, поэтому и спросил про эту тему)) Будем разбираться.
@user-kz4bx7bp5s
@user-kz4bx7bp5s Жыл бұрын
Здравствуйте! Спасибо за замечательную лекцию Кажется, на слайде 32 нужно сделать мьютекс mutable, чтобы использовать его в константных методах top() и empty() (если, конечно, имеется ввиду, что он - член класса)
@tilir
@tilir Жыл бұрын
Это хорошее замечание. Я сознательно не написал код этих методов. Мы это обсудим на следующей лекции.
@vladalu9794
@vladalu9794 Жыл бұрын
очень интересно, спасибо огромное за материал! detach() в CG рекомендуют не использовать вообще.
@tilir
@tilir Жыл бұрын
Я тоже видел немного разумных применений для detach.
@ddvamp
@ddvamp 24 күн бұрын
43:10 Константин, возможно стоит убрать повсеместно на слайдах указание типа мьютекса у guards, перейдя на CTAD? Или же вы таким образом ещё и показываете, какой именно мьютекс используется в примере?
@McRay8
@McRay8 5 ай бұрын
ни разу не сишник, но очень интересно
@user-fv3bf6ex6e
@user-fv3bf6ex6e Жыл бұрын
Спасибо за лекцию! На 45:21 задаётся вопрос сколько весит lock_guard, и Ваш ответ: "не дороже чем mutex". Имелось же в виду не дороже чем ссылка на мьютекс?
@tilir
@tilir Жыл бұрын
Да вы правы там внутри T&. Я почему-то ожидал что сам мьютекс тоже не слишком тяжёлый т.к. это хендл на объект ядра. Но сейчас проверил и нет, там полноценные 40 байт.
@user-fv3bf6ex6e
@user-fv3bf6ex6e Жыл бұрын
@@tilir я почему решил переспросить, так потому что помню, что у mutexа нет ни copy, ни move конструкторов (они есть, но deleted)
@grincha09
@grincha09 Жыл бұрын
1:14:07 действительно ли scoped_lock тяжелее lock_guard? Говорят "You can consider lock_guard deprecated" и "scoped_lock was (among the multiple mutex stuff) designed as a replacement to lock_guard, since the former could not be modified without breaking ABI". Как думаете?
@tilir
@tilir Жыл бұрын
Внезапно не тяжелее. Что интересно, он тоже обходится просто ссылкой если мьютекс один. А если не секрет это вы откуда цитируете?
@grincha09
@grincha09 Жыл бұрын
@@tilir ответы стаковерфлоу :)
@alexandrgrigoriev9577
@alexandrgrigoriev9577 Жыл бұрын
На kzfaq.info/get/bejne/rrqgdK2Iyp2-dGg.html вызывается destroy, в котором вручную вызывает деструктор для каждого указателя на объект. Но ведь ::operator new в 73-й строке не создает объекты. Не будет ли при удалении UB ?
@tilir
@tilir Жыл бұрын
Этот класс не предполагается к использованию напрямую. Он имеет смысл только как базовый класс и закладывается на определённые действия которые делает производный.
@dimon_ksi
@dimon_ksi Жыл бұрын
Что будет, если в не основном потоке не поймано брошенное исключение?
@tilir
@tilir Жыл бұрын
std terminate разумеется.
When You Get Ran Over By A Car...
00:15
Jojo Sim
Рет қаралды 16 МЛН
БОЛЬШОЙ ПЕТУШОК #shorts
00:21
Паша Осадчий
Рет қаралды 8 МЛН
When You Get Ran Over By A Car...
00:15
Jojo Sim
Рет қаралды 16 МЛН