Блокування (англ. lock, рос. блокировка) — один із механізмів синхронізації в інформатиці, що забезпечує ексклюзивний доступ до спільного ресурсу.
Типи блокування
- М'яке блокування — кожен потік перед доступом до спільного ресурсу повинен заблокувати ресурс;
- Обов'язкове блокування — коли доступ до заблокованого ресурсу породжує виняткову ситуацію в потоці, що намагався отримати доступ.
Блокування відрізняються по типу доступу до даних:
- спільне (тільки для читання) англ. shared (read only);
- ексклюзивне (для читання та запису) англ. exclusive (read-write).
Найпростіший спосіб блокування — бінарний семафор. Він не розрізняє типи доступу до даних.
Типи блокувань відрізняються по стратегії продовження виконання заблокованого потоку:
- потік призупиняє виконання і планувальник потоків запускає наступний потік;
- — потік в циклі перевіряє доступ до ресурсу. Таке блокування має перевагу коли очікування в критичній секції є короткими.
Реалізація
Для ефективної реалізації механізму блокування потрібна підтримка на апаратному рівні, наприклад, у вигляді однієї із атомарних операції таких як «test-and-set», чи«compare-and-swap», що дозволяють перевірити наявність блокування і якщо воно відсутнє встановити його.
Однопроцесорні системи також можуть використовувати послідовності команд, які не перериваються, за допомогою спеціальних префіксів команд, але це не працює в багатопроцесорних системах із спільною пам'яттю.
В системах де не існує таких атомарних операцій можна використовувати алгоритм Декера чи алгоритм Пітерсона.
Гранулярність блокування
Гранулярність блокування — це міра кількості даних для блокування. Гранулярність блокування є компромісом між:
- накладними витратами — розміром пам'яті для створення блокуваннь та команд процесора для блокування/розблокування ресурсів;
- суперництвом за блокування — чим меншу кількість даних буде заблоковано, тим менша імовірність очікування зняття блокування;
- взаємним блокуванням — чим більша кількість блокувань, вища імовірність отримати взаємне блокування.
Блокування читання та запису
Блокування читання та запису англ. read–write lock (RW lock) — примітив синхронізації для розв'язання задачі читачів та записувачів.
Даний вид блокування дозволяє операціям читання виконуватись паралельно, але вимагає ексклюзивного доступу для запису.
Застосовується для структур даних, що не можуть бути записані атомарною операцією (наприклад алгоритмом read-copy-update).
RW блокування може бути реалізоване з різними пріоритетами читання та запису:
- RW блокування з пріоритетом читання — записувач не може заблокувати ресурс, якщо хоч один читач блокує його.
- Режим з найбільшою паралельністю виконання, але можливий ресурсний голод для записувачів.
- RW блокування з пріоритетом запису — забороняє новим читачам блокувати ресурс, якщо записувач очікує на отримання блокування.
- Найменша паралельність виконання, можливий ресурсний голод для читачів. На відміну від попереднього випадку, потребує 2 м'ютекса, замість одного.
- RW блокування без пріоритету — алгоритми без ресурсного голоду, наприклад FIFO.
- Реалізація
pthread_rwlock_t
в стандарті POSIX
std::shared_mutex
в
boost::shared_mutex
таboost::upgrade_mutex
в Boost
System.Threading.ReaderWriterLockSlim
в .NET
ReadWriteLock
таReentrantReadWriteLock
в Java version 5
Блокування (СУБД)
Цей розділ потребує доповнення. |
Примітки
- The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition: pthread_rwlock_destroy. The IEEE and The Open Group. Архів оригіналу за 9 грудня 2010. Процитовано 14 May 2011.
- Shared locking in C++. Архів оригіналу за 26 серпня 2016. Процитовано 22 травня 2015.
- Anthony Williams. Synchronization – Boost 1.52.0. Процитовано 31 Jan 2012.
- ReaderWriteLockSlim Class (System.Threading). Microsoft Corporation. Архів оригіналу за 16 липня 2017. Процитовано 14 May 2011.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Blokuvannya angl lock ros blokirovka odin iz mehanizmiv sinhronizaciyi v informatici sho zabezpechuye eksklyuzivnij dostup do spilnogo resursu Zmist 1 Tipi blokuvannya 2 Realizaciya 3 Granulyarnist blokuvannya 4 Blokuvannya chitannya ta zapisu 5 Blokuvannya SUBD 6 PrimitkiTipi blokuvannyared M yake blokuvannya kozhen potik pered dostupom do spilnogo resursu povinen zablokuvati resurs Obov yazkove blokuvannya koli dostup do zablokovanogo resursu porodzhuye vinyatkovu situaciyu v potoci sho namagavsya otrimati dostup Blokuvannya vidriznyayutsya po tipu dostupu do danih spilne tilki dlya chitannya angl shared read only eksklyuzivne dlya chitannya ta zapisu angl exclusive read write Najprostishij sposib blokuvannya binarnij semafor Vin ne rozriznyaye tipi dostupu do danih Tipi blokuvan vidriznyayutsya po strategiyi prodovzhennya vikonannya zablokovanogo potoku potik prizupinyaye vikonannya i planuvalnik potokiv zapuskaye nastupnij potik spinlock potik v cikli pereviryaye dostup do resursu Take blokuvannya maye perevagu koli ochikuvannya v kritichnij sekciyi ye korotkimi Realizaciyared Dlya efektivnoyi realizaciyi mehanizmu blokuvannya potribna pidtrimka na aparatnomu rivni napriklad u viglyadi odniyeyi iz atomarnih operaciyi takih yak test and set fetch and add chi compare and swap sho dozvolyayut pereviriti nayavnist blokuvannya i yaksho vono vidsutnye vstanoviti jogo Odnoprocesorni sistemi takozh mozhut vikoristovuvati poslidovnosti komand yaki ne pererivayutsya za dopomogoyu specialnih prefiksiv komand ale ce ne pracyuye v bagatoprocesornih sistemah iz spilnoyu pam yattyu V sistemah de ne isnuye takih atomarnih operacij mozhna vikoristovuvati algoritm Dekera chi algoritm Pitersona Granulyarnist blokuvannyared Granulyarnist blokuvannya ce mira kilkosti danih dlya blokuvannya Granulyarnist blokuvannya ye kompromisom mizh nakladnimi vitratami rozmirom pam yati dlya stvorennya blokuvann ta komand procesora dlya blokuvannya rozblokuvannya resursiv supernictvom za blokuvannya chim menshu kilkist danih bude zablokovano tim mensha imovirnist ochikuvannya znyattya blokuvannya vzayemnim blokuvannyam chim bilsha kilkist blokuvan visha imovirnist otrimati vzayemne blokuvannya Blokuvannya chitannya ta zapisured Blokuvannya chitannya ta zapisu angl read write lock RW lock primitiv sinhronizaciyi dlya rozv yazannya zadachi chitachiv ta zapisuvachiv Danij vid blokuvannya dozvolyaye operaciyam chitannya vikonuvatis paralelno ale vimagaye eksklyuzivnogo dostupu dlya zapisu Zastosovuyetsya dlya struktur danih sho ne mozhut buti zapisani atomarnoyu operaciyeyu napriklad algoritmom read copy update RW blokuvannya mozhe buti realizovane z riznimi prioritetami chitannya ta zapisu RW blokuvannya z prioritetom chitannya zapisuvach ne mozhe zablokuvati resurs yaksho hoch odin chitach blokuye jogo Rezhim z najbilshoyu paralelnistyu vikonannya ale mozhlivij resursnij golod dlya zapisuvachiv RW blokuvannya z prioritetom zapisu zaboronyaye novim chitacham blokuvati resurs yaksho zapisuvach ochikuye na otrimannya blokuvannya Najmensha paralelnist vikonannya mozhlivij resursnij golod dlya chitachiv Na vidminu vid poperednogo vipadku potrebuye 2 m yuteksa zamist odnogo RW blokuvannya bez prioritetu algoritmi bez resursnogo golodu napriklad FIFO Realizaciya pthread rwlock t v standarti POSIX 1 std shared mutex v C 14 2 boost shared mutex ta boost upgrade mutex v Boost 3 System Threading ReaderWriterLockSlim v NET 4 ReadWriteLock 5 ta ReentrantReadWriteLock 6 v Java version 5Blokuvannya SUBD red Cej rozdil potrebuye dopovnennya Primitkired The Open Group Base Specifications Issue 6 IEEE Std 1003 1 2004 Edition pthread rwlock destroy The IEEE and The Open Group Arhiv originalu za 9 grudnya 2010 Procitovano 14 May 2011 Shared locking in C Arhiv originalu za 26 serpnya 2016 Procitovano 22 travnya 2015 Anthony Williams Synchronization Boost 1 52 0 Procitovano 31 Jan 2012 ReaderWriteLockSlim Class System Threading Microsoft Corporation Arhiv originalu za 16 lipnya 2017 Procitovano 14 May 2011 Shablon Javadoc SE Shablon Javadoc SE Otrimano z https uk wikipedia org w index php title Blokuvannya programuvannya amp oldid 42313151 Blokuvannya chitannya ta zapisu