Что такое блокировки (shared/exclusive) и когда они возникают?
1️⃣ Как кратко ответить
Блокировки — это механизмы управления доступом к ресурсам в многопоточных или многопользовательских системах. Shared (разделяемые) блокировки позволяют нескольким транзакциям читать ресурс одновременно, но запрещают запись. Exclusive (исключительные) блокировки позволяют только одной транзакции изменять ресурс, блокируя доступ другим транзакциям как на чтение, так и на запись. Блокировки возникают при выполнении операций, требующих согласованности данных, например, при чтении или записи в базу данных.
2️⃣ Подробное объяснение темы
Блокировки — это ключевой механизм в системах управления базами данных (СУБД) и других многопользовательских системах, который обеспечивает согласованность и целостность данных при одновременном доступе нескольких пользователей или процессов. Они предотвращают ситуации, когда несколько транзакций могут одновременно изменять одни и те же данные, что может привести к некорректным результатам.
Shared (разделяемые) блокировки
Shared блокировки позволяют нескольким транзакциям одновременно читать один и тот же ресурс. Это полезно, когда необходимо обеспечить параллельный доступ к данным без их изменения. Например, если несколько пользователей хотят прочитать одну и ту же запись в базе данных, они могут это сделать одновременно, если на запись установлена shared блокировка.
Пример: Представьте библиотеку, где несколько читателей могут одновременно читать одну и ту же книгу, но никто не может её изменить.
Exclusive (исключительные) блокировки
Exclusive блокировки позволяют только одной транзакции получить доступ к ресурсу для его изменения. Когда ресурс заблокирован эксклюзивной блокировкой, другие транзакции не могут ни читать, ни изменять этот ресурс. Это необходимо для предотвращения конфликтов и обеспечения целостности данных.
Пример: В той же библиотеке, если кто-то хочет внести изменения в книгу (например, исправить ошибку), он должен получить эксклюзивный доступ, чтобы никто другой не мог её читать или изменять в это время.
Когда возникают блокировки
Блокировки возникают в следующих ситуациях:
- Чтение данных: При выполнении операций чтения, если требуется обеспечить, чтобы данные не изменялись во время чтения, устанавливается shared блокировка.
- Запись данных: При выполнении операций записи или изменения данных устанавливается exclusive блокировка, чтобы другие транзакции не могли получить доступ к изменяемым данным.
- Транзакции: В рамках транзакций, чтобы обеспечить атомарность и изолированность операций, используются блокировки для управления доступом к данным.
Пример кода
Рассмотрим пример на SQL, демонстрирующий использование блокировок:
-- Начало транзакции
BEGIN TRANSACTION;
-- Установка shared блокировки на таблицу для чтения
SELECT * FROM Orders WITH (HOLDLOCK);
-- Установка exclusive блокировки на строку для изменения
UPDATE Orders
SET Status = 'Processed'
WHERE OrderID = 123
WITH (XLOCK);
-- Завершение транзакции
COMMIT;
BEGIN TRANSACTION;— начало транзакции, в рамках которой будут выполняться операции.SELECT * FROM Orders WITH (HOLDLOCK);— выполняется чтение данных из таблицыOrdersс установкой shared блокировки, чтобы другие транзакции не могли изменять данные, пока они читаются.UPDATE Orders SET Status = 'Processed' WHERE OrderID = 123 WITH (XLOCK);— выполняется обновление строки в таблицеOrdersс установкой exclusive блокировки, чтобы другие транзакции не могли ни читать, ни изменять эту строку.COMMIT;— завершение транзакции, после чего все блокировки снимаются.
Блокировки играют важную роль в обеспечении согласованности данных и предотвращении конфликтов в многопользовательских системах.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться