digital-garden/_inbox/Блокировки.md

3.3 KiB
Raw Blame History

aliases tags date zero-link parents linked
зрелость/🌱
2024-05-24
../garden/ru/meta/zero/00 Разработка

Блокировки в разработке, особенно в контексте многопоточности и баз данных, относятся к механизмам, предотвращающим одновременный доступ к ресурсу несколькими потоками или процессами, чтобы избежать несогласованности данных или других конфликтов.

Минусы блокировок:

  • Есть риск получить Deadlock
  • Блокировок может быть много

Виды реализаций:

  • Мьютексы (Mutexes):
    • Назначение: Обеспечивают эксклюзивный доступ к ресурсу. Когда поток захватывает мьютекс, другие потоки должны ждать, пока он освободится.
    • Применение: В многопоточных приложениях для синхронизации доступа к общим данным.
  • Читательские/писательские блокировки (Reader/Writer Locks):
    • Назначение: Позволяют нескольким потокам читать ресурс одновременно, но блокируют доступ на запись. Если один поток пишет, все остальные потоки (и читатели, и писатели) должны ждать.
    • Применение: Когда ресурс чаще читается, чем пишется, для улучшения производительности.
  • Семафоры (Semaphores):
    • Назначение: Управляют доступом к ресурсу, ограничивая количество потоков, которые могут одновременно им пользоваться.
    • Применение: Для ограничения количества одновременно выполняемых операций, например, подключения к базе данных.
  • Блокировки баз данных (Database Locks):
    • Назначение: Предотвращают конкурентное выполнение операций, которые могут привести к некорректному состоянию данных.
    • Применение: В системах управления базами данных (СУБД) для управления транзакциями и поддержания целостности данных.

Классификация:

  • По области действия.
    • Строчные. Блокировка конкретной строки
    • Гранулярные. Блокировка
    • Предикативные
  • По строгости
    • Совместная. Shared lock. Можно читать заблокированные данные
    • Исключительная. Exclusive lock. С заблокированными данными ничего делать нельзя.