Подтвердить что ты не робот

Какая разница между исключительной блокировкой и общей блокировкой?

Согласно википедии,

Общие блокировки иногда называются "блокировки чтения", а эксклюзивные блокировки иногда называются "блокировки записи".

Можете ли вы объяснить обоснование терминов "общий" и "эксклюзивный"?

4b9b3361

Ответ 1

Я написал этот ответ, потому что я думал, что это будет забавная (и подходящая) аналогия:

Подумайте о блокируемом объекте в виде доски (запираемой) в классной комнате, где есть учитель (писатель) и многие ученики (читатели).

Пока учитель пишет что-то (эксклюзивная блокировка) на доске:

  • Никто не может его прочитать, потому что он все еще написан, и она блокирует ваше представление = > Если объект заблокирован, общие блокировки не могут быть получены.

  • Другие учителя не появятся и не начнут писать, или плата станет нечитаемой, и смущает учеников = > Если объект заблокирован, другие эксклюзивные блокировки не могут быть получены.

Когда ученики читают (разделяемые блокировки) то, что находится на доске:

  • Все они могут читать то, что на нем, вместе = > Несколько совлокальных шлюзов могут сосуществовать.

  • Учитель ждет, когда они закончат чтение, прежде чем она очистит доску, чтобы написать больше = > Если уже существует одна или несколько общих блокировок, исключительные блокировки не могут быть получены.

Ответ 2

Это довольно просто. Чтение блокировок также известно как общие блокировки, поскольку одновременно может считываться несколько процессов. Точкой блокировки чтения является предотвращение приобретения другим процессом блокировки записи. Напротив, блокировка записи блокирует все остальные операции, когда выполняется операция записи, поэтому она описывается как эксклюзивная.

Итак, блокировка чтения говорит: "Теперь вы можете читать, но если вы хотите писать, вам придется ждать", тогда как блокировка записи говорит "вам придется подождать".


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

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

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

Простое объединение всего состояния сеанса в структуру было огромным улучшением. Изменения состояния сеанса просто изменили значения членов структуры состояния сеанса. Поскольку ни одна другая сессия не имела случая или даже возможности напрямую ссылаться на состояние сеанса, единственной обновляемой коллекцией был список сеансов. В результате блокировка была совершенно ненужной во время сеанса, только в начале и в конце, а пропускная способность увеличилась в 3000 раз.

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

Ответ 3

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

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

Подробнее об этом: http://www.gnu.org/software/libc/manual/html_node/File-Locks.html

Ответ 4

Принцип такой же на стороне базы данных. Согласно документации Oracle

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

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