Изменения документа Примитивы синхронизации
Редактировал(а) Alexandr Fokin 2023/10/09 10:03
отредактировано Alexandr Fokin
на 2023/02/09 01:16
на 2023/02/09 01:16
отредактировано Alexandr Fokin
на 2022/10/04 17:42
на 2022/10/04 17:42
Изменить комментарий:
К данной версии нет комментариев
Комментарий
-
Свойства страницы (2 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Родительский документ
-
... ... @@ -1,1 +1,1 @@ 1 -Разработка.NET.C#.Многопоточность и асинхронность.WebHome1 +Разработка.NET.C#.Многопоточность.WebHome - Содержимое
-
... ... @@ -1,75 +1,0 @@ 1 -=== Типы примитивов === 2 - 3 -|Конструкции пользовательского режима| 4 -|Конструкции режима ядра| 5 -|Гибридные конструкции синхронизации потоков| 6 - 7 ----- 8 - 9 -=== Некоторые примитивы синхронизации === 10 - 11 -|(% style="width:590px" %) |(% style="width:892px" %) 12 -|(% style="width:590px" %)((( 13 -volatile 14 -[[https:~~/~~/learn.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/volatile>>https://learn.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/volatile]] 15 -[[https:~~/~~/learn.microsoft.com/ru-ru/dotnet/api/system.threading.volatile?view=net-5.0>>https://learn.microsoft.com/ru-ru/dotnet/api/system.threading.volatile?view=net-5.0]] 16 -)))|(% style="width:892px" %)((( 17 -1. Модификатор переменных, ограничивающий оптимизации компилятора c#. 18 -1. Класс, содержащий методы, которые помимо операции чтения/записи накладывают ограничение (барьер), не позволяющее процессору менять порядок выполнения команд. 19 -))) 20 -|(% style="width:590px" %)Interlocked 21 -[[https:~~/~~/learn.microsoft.com/ru-ru/dotnet/api/system.threading.interlocked?view=net-5.0>>https://learn.microsoft.com/ru-ru/dotnet/api/system.threading.interlocked?view=net-5.0]]|(% style="width:892px" %)Предоставляет набор некоторых операций, гарантирующих атомарность выполнения. 22 -Являет предпочтительным по сравнению с явной блокировкой. 23 - 24 -| | 25 -|Monitor|((( 26 -Реализуют идею критической секции. Ограничивает степень параллелизма на секциях, находящихся после Monitor.Enter, одним потоком. 27 -))) 28 -|Lock|Оператор lock является оберткой над классом Monitor, его операциями Enter/Exit, обернутыми в try-finally. 29 -|Semaphore 30 -SemaphoreSlim|Семафоры позволяют ограничить доступ выполнения кода определенным количеством потоков. 31 -|Mutex|Используется для синхронизации на уровне операционной системы. 32 -Может использоваться несколькими приложениями в рамках одной ОС. 33 -|ReaderWriterLock 34 -ReaderWriterLockSlim|Позволяет ограничить параллелизм либо 1 писателем, либо многими читателями. 35 -|AutoResetEvent 36 -ManualResetEven|Имеет 2 состояния (взведен и не взведен). 37 -Позволяет ожидать взведенного состояния. 38 -Содержит методы для взведения. 39 -|CountdownEvent|При инициализации задается значение счетчика. 40 -Позволяет ожидать, когда значение счетчика будет равно 0. 41 -Метод уменьшающий счетчик. 42 -|Spin*| 43 - 44 ----- 45 - 46 -=== Материалы === 47 - 48 -* [[Блокировки>>doc:Архитектура и модели.Блокировки.WebHome]] 49 -* Общие сведения о примитивах синхронизации 50 -[[https:~~/~~/learn.microsoft.com/ru-ru/dotnet/standard/threading/overview-of-synchronization-primitives?source=recommendations>>https://learn.microsoft.com/ru-ru/dotnet/standard/threading/overview-of-synchronization-primitives?source=recommendations]] 51 -* .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 1 52 -[[https:~~/~~/habr.com/ru/post/452094>>https://habr.com/ru/post/452094]] 53 -* .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 2 54 -[[https:~~/~~/habr.com/ru/post/459514>>https://habr.com/ru/post/459514]] 55 - 56 ----- 57 - 58 -=== Шаблон === 59 - 60 -При использовании инструментов важно освобождать освобождать блокировку, даже если в процессе выполнения логики возникнет исключение. 61 -Во многих случаях имеет смысл реализовывать объект обертку, реализующую блокировку, и не допускающую неправильное использование. 62 -Общий шаблон использования: 63 - 64 -{{code language="c#"}} 65 -EnterLock(); 66 -try 67 -{ 68 - //... Action 69 -} 70 -// catch {} 71 -finally 72 -{ 73 - ReleaseLock(); 74 -} 75 -{{/code}}