--- aliases: tags: - зрелость/🌱 date: - - 2024-05-24 zero-link: - "[[../garden/ru/meta/zero/00 Разработка]]" parents: linked: --- Блокировки в разработке, особенно в контексте многопоточности и баз данных, относятся к механизмам, предотвращающим одновременный доступ к ресурсу несколькими потоками или процессами, чтобы избежать несогласованности данных или других конфликтов. Минусы блокировок: - Есть риск получить [Deadlock](Deadlock.md) - Блокировок может быть много Виды реализаций: - **Мьютексы (Mutexes)**: - **Назначение**: Обеспечивают эксклюзивный доступ к ресурсу. Когда поток захватывает мьютекс, другие потоки должны ждать, пока он освободится. - **Применение**: В многопоточных приложениях для синхронизации доступа к общим данным. - **Читательские/писательские блокировки (Reader/Writer Locks)**: - **Назначение**: Позволяют нескольким потокам читать ресурс одновременно, но блокируют доступ на запись. Если один поток пишет, все остальные потоки (и читатели, и писатели) должны ждать. - **Применение**: Когда ресурс чаще читается, чем пишется, для улучшения производительности. - **Семафоры (Semaphores)**: - **Назначение**: Управляют доступом к ресурсу, ограничивая количество потоков, которые могут одновременно им пользоваться. - **Применение**: Для ограничения количества одновременно выполняемых операций, например, подключения к базе данных. - **Блокировки баз данных (Database Locks)**: - **Назначение**: Предотвращают конкурентное выполнение операций, которые могут привести к некорректному состоянию данных. - **Применение**: В системах управления базами данных (СУБД) для управления транзакциями и поддержания целостности данных. Классификация: - По области действия. - Строчные. Блокировка конкретной строки - Гранулярные. Блокировка - Предикативные - По строгости - Совместная. Shared lock. Можно читать заблокированные данные - Исключительная. Exclusive lock. С заблокированными данными ничего делать нельзя.