Изменения документа Многопоточность и асинхронность
Редактировал(а) Alexandr Fokin 2023/01/11 15:19
<
>
отредактировано Alexandr Fokin
на 2022/07/29 03:57
на 2022/07/29 03:57
отредактировано Alexandr Fokin
на 2022/12/12 11:55
на 2022/12/12 11:55
Изменить комментарий:
К данной версии нет комментариев
Комментарий
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -1,60 +1,10 @@ 1 1 | | 2 2 |Понятие критической секции.|Некоторый блок кода, в котором работа несколько поток ограничивается или управляется некоторым образом. Например в критической секции разрешена работа только одного потока, остальные потоки будут ожидать. 3 -(Т.е. пессимистичная блокировка)4 -|Понятие токена.|Поток проверяет токен, если токен свободен - забирает себе, иначе ожидает освобождения. В конце секции поток освобождает токен 3 +(Т.е. [[Пессимистичная блокировка>>doc:Архитектура и модели.Блокировки.Пессимистичная блокировка.WebHome]]) 4 +|Понятие токена.|Поток проверяет токен, если токен свободен - забирает себе, иначе ожидает освобождения. В конце секции поток освобождает токен. 5 5 6 6 ---- 7 7 8 -=== Некоторые примитивы синхронизации === 9 - 10 -|(% style="width:251px" %) |(% style="width:1271px" %) 11 -|(% style="width:251px" %)Monitor и конструкция Lock|(% style="width:1271px" %)((( 12 -Реализуют идею критической секции: то есть код, написанный между вызовами Monitor.Enter, Monitor.Exit на одном ресурсе может быть выполнен в один момент времени лишь одним потоком. 13 - 14 -Оператор lock оберткой над Enter/Exit обернутых в try-finally. 15 -))) 16 -|(% style="width:251px" %)Semaphore|(% style="width:1271px" %)Семафоры позволяют ограничить доступ выполнения кода определенным количеством потоков. 17 -|(% style="width:251px" %)Mutex|(% style="width:1271px" %)Используется для синхронизации на уровне операционной системы. 18 -Может использоваться несколькими приложениями в рамках одной ОС. 19 -|(% style="width:251px" %)ReaderWriterLock 20 -ReaderWriterLockSlim|(% style="width:1271px" %)Либо много потоков читает, либо 1 поток пишет. 21 -|(% style="width:251px" %) |(% style="width:1271px" %) 22 - 23 -(% style="width:432px" %) 24 -|(% style="width:386px" %)Конструкции пользовательского режима|(% style="width:43px" %) 25 -|(% style="width:386px" %)Конструкции режима ядра|(% style="width:43px" %) 26 -|(% style="width:386px" %)Гибридные конструкции синхронизации потоков|(% style="width:43px" %) 27 - 28 -Материалы: 29 - 30 -* .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 1 31 -https://habr.com/ru/post/452094 32 -* .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 2 33 -https://habr.com/ru/post/459514 34 - 35 ----- 36 - 37 -=== Шаблон === 38 - 39 -При использовании инструментов важно освобождать освобождать блокировку, даже если в процессе выполнения логики возникнет исключение. 40 -Во многих случаях имеет смысл реализовывать объект обертку, реализующую блокировку, и не допускающую неправильное использование. 41 -Общий шаблон использования: 42 - 43 -{{code language="c#"}} 44 -EnterLock(); 45 -try 46 -{ 47 - //... Action 48 -} 49 -catch {} 50 -finally 51 -{ 52 - ReleaseLock(); 53 -} 54 -{{/code}} 55 - 56 ----- 57 - 58 58 Простой пример: 59 59 Запись в один и тот же файл с разных потоков. (В определенный момент времени в файл записывает только 1 поток) 60 60 ... ... @@ -68,6 +68,25 @@ 68 68 69 69 ---- 70 70 21 +==== Внутренние ссылки: ==== 22 + 23 +====== Дочерние страницы: ====== 24 + 71 71 {{children/}} 72 72 73 - 27 +====== Обратные ссылки: ====== 28 + 29 +{{velocity}} 30 +#set ($links = $doc.getBacklinks()) 31 +#if ($links.size() > 0) 32 + #foreach ($docname in $links) 33 + #set ($rdoc = $xwiki.getDocument($docname).getTranslatedDocument()) 34 + * [[$escapetool.xml($rdoc.fullName)]] 35 + #end 36 +#else 37 + No back links for this page! 38 +#end 39 +{{/velocity}} 40 + 41 +---- 42 +