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

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

<
От версии < 1.18
отредактировано Alexandr Fokin
на 2023/10/09 10:03
К версии < 1.2 >
отредактировано Alexandr Fokin
на 2022/10/04 17:44
Изменить комментарий: К данной версии нет комментариев

Комментарий

Подробности

Свойства страницы
Родительский документ
... ... @@ -1,1 +1,1 @@
1 -Разработка.NET.C#.Многопоточность и асинхронность.WebHome
1 +Разработка.NET.C#.Многопоточность.WebHome
Содержимое
... ... @@ -1,4 +1,4 @@
1 -=== Типы примитивов ===
1 +=== Типы примитивов. ===
2 2  
3 3  |Конструкции пользовательского режима|
4 4  |Конструкции режима ядра|
... ... @@ -6,59 +6,29 @@
6 6  
7 7  ----
8 8  
9 -=== Некоторые примитивы синхронизации ===
9 +=== Некоторые примитивы синхронизации ===
10 10  
11 -|(% style="width:608px" %)Конструкции пользовательского режима|(% style="width:892px" %)
12 -|(% style="width:608px" %)(((
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:608px" %)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 -Являет предпочтительным по сравнению с явной блокировкой.
11 +| |
12 +|Monitor и конструкция Lock|(((
13 +Реализуют идею критической секции: то есть код, написанный между вызовами Monitor.Enter, Monitor.Exit на одном ресурсе может быть выполнен в один момент времени лишь одним потоком.
23 23  
24 -|(% style="width:288px" %) |(% style="width:1207px" %)
25 -|(% style="width:288px" %)Monitor (Гибридные конструкции
26 -синхронизации потоков)|(% style="width:1207px" %)(((
27 -Реализуют идею критической секции. Ограничивает степень параллелизма на секциях, находящихся после Monitor.Enter, одним потоком.
15 +Оператор lock оберткой над Enter/Exit обернутых в try-finally.
28 28  )))
29 -|(% style="width:288px" %)Lock|(% style="width:1207px" %)Оператор lock является оберткой над классом Monitor, его операциями Enter/Exit, обернутыми в try-finally.
30 -|(% style="width:288px" %)Semaphore (Конструкции режима ядра)
31 -SemaphoreSlim|(% style="width:1207px" %)Семафоры позволяют ограничить доступ выполнения кода определенным количеством потоков.
32 -|(% style="width:288px" %)Mutex (Конструкции режима ядра)|(% style="width:1207px" %)Используется для синхронизации на уровне операционной системы.
17 +|Semaphore|Семафоры позволяют ограничить доступ выполнения кода определенным количеством потоков.
18 +|Mutex|Используется для синхронизации на уровне операционной системы.
33 33  Может использоваться несколькими приложениями в рамках одной ОС.
34 -|(% style="width:288px" %)ReaderWriterLock
35 -ReaderWriterLockSlim (Гибридные конструкции
36 -синхронизации потоков)|(% style="width:1207px" %)Позволяет ограничить параллелизм либо 1 писателем, либо многими читателями.
37 -|(% style="width:288px" %)AutoResetEvent (Конструкции режима ядра)
38 -ManualResetEven (Конструкции режима ядра)|(% style="width:1207px" %)Имеет 2 состояния (взведен и не взведен).
39 -Позволяет ожидать взведенного состояния.
40 -Содержит методы для взведения.
41 -|(% style="width:288px" %)CountdownEvent (Гибридные конструкции
42 -синхронизации потоков)|(% style="width:1207px" %)При инициализации задается значение счетчика.
43 -Позволяет ожидать, когда значение счетчика будет равно 0.
44 -Метод уменьшающий счетчик.
45 -|(% style="width:288px" %)Spin*|(% style="width:1207px" %)
20 +|ReaderWriterLock
21 +ReaderWriterLockSlim|Либо много потоков читает, либо 1 поток пишет.
22 +| |
46 46  
47 47  ----
48 48  
49 -=== Материалы ===
26 +Материалы:
50 50  
51 -* [[Блокировки>>doc:Архитектура и модели.Блокировки.WebHome]]
52 -* Общие сведения о примитивах синхронизации
53 -[[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]]
54 54  * .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 1
55 55  [[https:~~/~~/habr.com/ru/post/452094>>https://habr.com/ru/post/452094]]
56 56  * .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 2
57 57  [[https:~~/~~/habr.com/ru/post/459514>>https://habr.com/ru/post/459514]]
58 -* Барьеры памяти и неблокирующая синхронизация в .NET
59 -[[https:~~/~~/habr.com/ru/articles/130318/>>https://habr.com/ru/articles/130318/]]
60 -* Threading in C# Joseph Albahari
61 -[[https:~~/~~/www.albahari.com/threading/part2.aspx>>https://www.albahari.com/threading/part2.aspx]]
62 62  
63 63  ----
64 64