Изменения документа Примитивы синхронизации
Редактировал(а) Alexandr Fokin 2023/10/09 10:03
отредактировано Alexandr Fokin
на 2022/10/04 17:42
на 2022/10/04 17:42
отредактировано Alexandr Fokin
на 2022/11/13 18:55
на 2022/11/13 18:55
Изменить комментарий:
К данной версии нет комментариев
Комментарий
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -1,0 +1,67 @@ 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 +|Monitor|((( 25 + Реализуют идею критической секции. Ограничивает степень параллелизма на секциях, находящихся после Monitor.Enter, одним потоком. 26 +))) 27 +|Lock|Оператор lock является оберткой над классом Monitor, его операциями Enter/Exit, обернутыми в try-finally. 28 +|Semaphore 29 +SemaphoreSlim|Семафоры позволяют ограничить доступ выполнения кода определенным количеством потоков. 30 +|Mutex|Используется для синхронизации на уровне операционной системы. 31 +Может использоваться несколькими приложениями в рамках одной ОС. 32 +|ReaderWriterLock 33 +ReaderWriterLockSlim|Позволяет ограничить параллелизм либо 1 писателем, либо многими читателями. 34 +|Spin*| 35 + 36 +---- 37 + 38 +=== Материалы === 39 + 40 +* [[Блокировки>>doc:Архитектура и модели.Блокировки.WebHome]] 41 +* Общие сведения о примитивах синхронизации 42 +[[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]] 43 +* .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 1 44 +[[https:~~/~~/habr.com/ru/post/452094>>https://habr.com/ru/post/452094]] 45 +* .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 2 46 +[[https:~~/~~/habr.com/ru/post/459514>>https://habr.com/ru/post/459514]] 47 + 48 +---- 49 + 50 +=== Шаблон === 51 + 52 +При использовании инструментов важно освобождать освобождать блокировку, даже если в процессе выполнения логики возникнет исключение. 53 +Во многих случаях имеет смысл реализовывать объект обертку, реализующую блокировку, и не допускающую неправильное использование. 54 +Общий шаблон использования: 55 + 56 +{{code language="c#"}} 57 +EnterLock(); 58 +try 59 +{ 60 + //... Action 61 +} 62 +// catch {} 63 +finally 64 +{ 65 + ReleaseLock(); 66 +} 67 +{{/code}}