Изменения документа Примитивы синхронизации

Редактировал(а) Alexandr Fokin 2023/10/09 10:03

От версии < 1.3 >
отредактировано Alexandr Fokin
на 2022/10/04 17:50
К версии 1.1 >
отредактировано Alexandr Fokin
на 2022/10/04 17:42
>
Изменить комментарий: К данной версии нет комментариев

Комментарий

Подробности

Свойства страницы
Содержимое
... ... @@ -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}}