Введение

Механизм синхронизации для обеспечения ограничений на доступ к ресурсу. В информатике замок или мьютекс (от взаимного исключения) — это примитив синхронизации, предотвращающий одновременное изменение или доступ к состоянию несколькими потоками выполнения. Замки обеспечивают соблюдение политик управления конкурентным доступом на основе взаимного исключения, и благодаря разнообразию возможных методов существуют различные уникальные реализации для разных приложений.

Замок базы данных

Блокировки базы данных могут использоваться для обеспечения синхронизации транзакций. То есть, при конкурентной обработке транзакций (перемежающемся выполнении транзакций) использование двухфазных блокировок гарантирует, что параллельное выполнение транзакции эквивалентно некоторой последовательной последовательности транзакций. Однако, взаимные блокировки (дедлоки) являются нежелательным побочным эффектом блокировок в базах данных. Предотвращение взаимных блокировок достигается предварительным определением порядка блокировки между транзакциями, либо их обнаружением с помощью графов ожидания. Альтернативой блокировкам для синхронизации базы данных, позволяющей избежать взаимных блокировок, является использование глобальных меток времени с полным порядком. Существуют механизмы для управления действиями нескольких одновременных пользователей в базе данных, целью которых является предотвращение потери обновлений и "грязного" чтения. Существуют два типа блокировок: пессимистическая и оптимистическая:

Пессимистическая блокировка: пользователь, читающий запись с намерением ее обновить, устанавливает на нее эксклюзивную блокировку, чтобы предотвратить манипуляции с ней другими пользователями. Это означает, что никто другой не сможет изменить эту запись, пока пользователь не снимет блокировку. Недостаток заключается в том, что пользователи могут быть заблокированы на длительное время, что замедляет общую скорость отклика системы и вызывает разочарование. Области применения пессимистической блокировки: она в основном используется в средах с высокой степенью конкуренции за данные (когда большое количество пользователей одновременно обращаются к базе данных); когда стоимость защиты данных с помощью блокировок ниже, чем стоимость отката транзакций в случае возникновения конфликтов параллельного доступа. Пессимистическая блокировка наиболее эффективна, когда время блокировки короткое, например, при программной обработке записей. Пессимистическая блокировка требует постоянного соединения с базой данных и не является масштабируемым решением при взаимодействии пользователей с данными, поскольку записи могут быть заблокированы на относительно длительное время. Она не подходит для разработки веб-приложений.

Оптимистическая блокировка: она позволяет нескольким одновременным пользователям получать доступ к базе данных, при этом система сохраняет копию исходных данных, прочитанных каждым пользователем. Когда пользователь хочет обновить запись, приложение определяет, изменил ли другой пользователь запись с момента ее последнего чтения. Это делается путем сравнения исходных данных, хранящихся в памяти, с записью в базе данных для проверки внесенных изменений. Любое расхождение между исходными данными и записью в базе данных нарушает правила параллельного доступа и, следовательно, система отклоняет запрос на обновление. Генерируется сообщение об ошибке, и пользователю предлагается повторить процесс обновления. Это повышает производительность базы данных за счет уменьшения количества необходимых блокировок, что снижает нагрузку на сервер базы данных. Она эффективно работает с таблицами, требующими ограниченного количества обновлений, поскольку пользователи не блокируются. Однако некоторые обновления могут завершаться неудачно. Недостаток заключается в постоянных сбоях обновления из-за большого количества запросов на обновление от нескольких одновременных пользователей, что может вызывать разочарование у пользователей. Области применения оптимистической блокировки: она подходит для сред с низкой конкуренцией за данные или когда требуется доступ к данным только для чтения. Оптимистическая блокировка широко используется в .NET для решения задач мобильных и автономных приложений, где блокировка строк данных на длительное время нецелесообразна. Кроме того, поддержание блокировок записей требует постоянного соединения с сервером базы данных, что невозможно в автономных приложениях.

Мутекс против семафоров

Семафоры (программирование) #Семафоры и мьютексы