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

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

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

Комментарий

Подробности

Свойства страницы
Содержимое
... ... @@ -1,52 +1,0 @@
1 -=== Типы примитивов. ===
2 -
3 -|Конструкции пользовательского режима|
4 -|Конструкции режима ядра|
5 -|Гибридные конструкции синхронизации потоков|
6 -
7 -----
8 -
9 -=== Некоторые примитивы синхронизации ===
10 -
11 -| |
12 -|Monitor и конструкция Lock|(((
13 -Реализуют идею критической секции: то есть код, написанный между вызовами Monitor.Enter, Monitor.Exit на одном ресурсе может быть выполнен в один момент времени лишь одним потоком.
14 -
15 -Оператор lock оберткой над Enter/Exit обернутых в try-finally.
16 -)))
17 -|Semaphore|Семафоры позволяют ограничить доступ выполнения кода определенным количеством потоков.
18 -|Mutex|Используется для синхронизации на уровне операционной системы.
19 -Может использоваться несколькими приложениями в рамках одной ОС.
20 -|ReaderWriterLock
21 -ReaderWriterLockSlim|Либо много потоков читает, либо 1 поток пишет.
22 -| |
23 -
24 -----
25 -
26 -Материалы:
27 -
28 -* .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 1
29 -[[https:~~/~~/habr.com/ru/post/452094>>https://habr.com/ru/post/452094]]
30 -* .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 2
31 -[[https:~~/~~/habr.com/ru/post/459514>>https://habr.com/ru/post/459514]]
32 -
33 -----
34 -
35 -=== Шаблон ===
36 -
37 -При использовании инструментов важно освобождать освобождать блокировку, даже если в процессе выполнения логики возникнет исключение.
38 -Во многих случаях имеет смысл реализовывать объект обертку, реализующую блокировку, и не допускающую неправильное использование.
39 -Общий шаблон использования:
40 -
41 -{{code language="c#"}}
42 -EnterLock();
43 -try
44 -{
45 - //... Action
46 -}
47 -// catch {}
48 -finally
49 -{
50 - ReleaseLock();
51 -}
52 -{{/code}}