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