Изменения документа Примитивы синхронизации
Редактировал(а) Alexandr Fokin 2023/10/09 10:03
отредактировано Alexandr Fokin
на 2022/10/04 17:44
на 2022/10/04 17:44
отредактировано Alexandr Fokin
на 2022/10/04 17:42
на 2022/10/04 17:42
Изменить комментарий:
К данной версии нет комментариев
Комментарий
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -1,52 +1,0 @@ 1 -=== Типы примитивов. === 2 - 3 -|Конструкции пользовательского режима| 4 -|Конструкции режима ядра| 5 -|Гибридные конструкции синхронизации потоков| 6 - 7 ----- 8 - 9 -=== Некоторые примитивы синхронизации === 10 - 11 -| | 12 -|Monitor и конструкция Lock|((( 13 -Реализуют идею критической секции: то есть код, написанный между вызовами Monitor.Enter, Monitor.Exit на одном ресурсе может быть выполнен в один момент времени лишь одним потоком. 14 - 15 -Оператор lock оберткой над Enter/Exit обернутых в try-finally. 16 -))) 17 -|Semaphore|Семафоры позволяют ограничить доступ выполнения кода определенным количеством потоков. 18 -|Mutex|Используется для синхронизации на уровне операционной системы. 19 -Может использоваться несколькими приложениями в рамках одной ОС. 20 -|ReaderWriterLock 21 -ReaderWriterLockSlim|Либо много потоков читает, либо 1 поток пишет. 22 -| | 23 - 24 ----- 25 - 26 -Материалы: 27 - 28 -* .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 1 29 -[[https:~~/~~/habr.com/ru/post/452094>>https://habr.com/ru/post/452094]] 30 -* .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 2 31 -[[https:~~/~~/habr.com/ru/post/459514>>https://habr.com/ru/post/459514]] 32 - 33 ----- 34 - 35 -=== Шаблон === 36 - 37 -При использовании инструментов важно освобождать освобождать блокировку, даже если в процессе выполнения логики возникнет исключение. 38 -Во многих случаях имеет смысл реализовывать объект обертку, реализующую блокировку, и не допускающую неправильное использование. 39 -Общий шаблон использования: 40 - 41 -{{code language="c#"}} 42 -EnterLock(); 43 -try 44 -{ 45 - //... Action 46 -} 47 -// catch {} 48 -finally 49 -{ 50 - ReleaseLock(); 51 -} 52 -{{/code}}