#19 Многопоточность - lock, Monitor, Mutex, Semaphore. Ответ на вопрос собеседования C# / .Net

preview_player
Показать описание
#многопоточность #lock #monitor #mutex #semaphore #syncronisation #синхронизацияпотоков #csharp #dotnet #andriyshyrokoriadov
В видео представлены различные возможность синхронизации потоко при многопоточном программировании: lock, Monitor, Mutex, Semaphore.
Обзор представлен в форме ответа на вопрос, который встречается на собеседованиях на позицию "программист C# / .Net".

0:15 - проблема актуальности данных при многопоточного программирования
1:10 - пример синхронизации из жизни
3:15 - ключевое слово lock
5:15 - недостатки использования слова lock
6:35 - другая форма записи ключевого слова lock - Monitor
7:30 - класс Mutex
8:30 - класс Semaphore
10:00 - специальные атрибуты

Дополнительная информация:
Рекомендации по теме
Комментарии
Автор

Спасибо за Ваши видео, они сильно помогают заполнять некоторые пробелы. Вот чего мне в этом видео не хватило - рекомендаций когда использовать тот или иной подход.
Кроме того было потеряно пару важных аспектов:
1) Есть возможность синхронизации с помощью AutoResetEvent. Возможно и не самый широко применяемый, но всё же есть.
2) Возможность применения в синхронном и асинхронном коде. Например: В асинхронном коде lock вызовет ошибку SynchronizationLockException, а Mutex ApplicationException

АлексСандр-щл
Автор

Вот как и в комментарии одном ниже, ваша лекция отлично подходит под заполнение пробелов)
Когда на уроке изучал и теорию, и практику, и при себе уже имеешь пример кода -- такое закрепление материала прям отличное)
Только после вашего видео тема, можно сказать, закреплялась полностью

mavezo
Автор

не могу не сделать замечание: под капотом у монитора на уровне clr используется spinWait и mutex. по умолчанию spinwait работает 10 итераций, после чего блокировка проваливается на mutex (уровень ядра).
Тут важно понимать контекст работы программы и длительность блокировки а так же в какой среде исполняется программа, одно ядро, один многоядерный процесор, несколько многоядерных процессов + параметры квантования в целевой операционной системе. только так можно принять действительно правильное решение о том, какой блокировкой и как пользоваться.

MrMihap
Автор

лайк поставил . . . спасибо за ОБЩИЙ ОБЗОР

РНС_Саакашвили
Автор

Спасибо за видео. Прочитал в текущей документации ms насчёт Mutex, оказывается, что они бывают двух типов - локальный и именованный. Именованный виден всей системе, а локальный только процессу в котором он был создан. А есть ли варик использовать локальный Mutex вместо lock, так как он всё равно не виден другим процессам?

ФедорАргунов-ря
Автор

Пожалуйста приведите пример синхроницации протокола на уровне ос. Не понимаю как это используется. Вот у нас есть приложение - процесс, в рамках процесса есть потоки которые надо синхронизировать, получается нужна синхронизация в рамках одной программы/процесса - тоесть нужны локи. А в каком контексте надо использовать синхронизации на уровне ос. Спасибо большое заранее!

omsohumax
Автор

Хорошо объясняете, но формат с листочком и ручкой смотреть крайне тяжело. На этапе объяснения и примеров с аналогиями еще можно понять, но писать код на листе - это какой-то зашквар в 2021-м.

iGynLoD