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

В чем разница между выжиданием и ожиданием раны?

В чем разница между ожиданием и смертью?

Я обнаружил, что оба метода предотвращения взаимоблокировок делают одно и то же (откат старшего процесса).

Кто-нибудь может объяснить мне, чем они отличаются на подходящем примере?

4b9b3361

Ответ 1

Схема ожидания > . Это не превентивный метод предотвращения тупиковой ситуации. Когда транзакция Ti запрашивает элемент данных, который в настоящее время удерживается Tj, Ti может ждать только, если у него есть метка времени меньше, чем у Tj (это Ti старше, чем Tj), в противном случае Ti откатывается (умирает).

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

(1) Если TS (Ti) TS (Tj) - это Ti, который запрашивает конфликтную блокировку, старше Tj - тогда Ti может дождаться момента, когда будет доступен элемент данных.

(2) Если TS (Ti) > TS (tj) - это Ti, меньше, чем Tj - тогда Ti умирает. Ti перезапускается позже со случайной задержкой, но с той же меткой времени.

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

Например:

Предположим, что транзакции T22, T23, T24 имеют отметки времени 5, 10 и 15 соответственно. Если T22 запрашивает элемент данных, удерживаемый T23, тогда T22 будет ждать. Если T24 запрашивает элемент данных, удерживаемый T23, тогда T24 будет откат назад.

Схема ожидания ран: Это превентивный метод предотвращения тупиковой ситуации. Это аналог схемы ожидания. Когда Transaction Ti запрашивает элемент данных, который в настоящее время удерживается Tj, Ti может ждать только, если у него есть метка времени больше, чем у Tj, иначе Tj откат (Tj ранен Ti).

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

(1) Если TS (Ti) TS (Tj), то Ti заставляет Tj откатываться - это Ti раны Tj. Tj перезапускается позже со случайной задержкой, но с той же меткой времени.

(2) Если TS (Ti) > TS (Tj), то Ti вынужден ждать, пока ресурс не будет доступен.

Эта схема позволяет младшей транзакции ждать; но когда более старая транзакция запрашивает элемент, хранящийся младшим, более старая транзакция заставляет младшего отменить и освободить элемент.

Например:

Предположим, что транзакции T22, T23, T24 имеют отметки времени 5, 10 и 15 соответственно. Если T22 запрашивает элемент данных, удерживаемый T23, тогда элемент данных будет выгружен из T23, и T23 будет откат. Если T24 запрашивает элемент данных, удерживаемый T23, то T24 будет ждать.

В обоих случаях транзакция, которая поступает в систему на более позднем этапе, прерывается.

Ответ 2

Parth дал подробный ответ. Здесь я суммирую его по-другому.

Предположим, что Ti запрашивает блокировку, удерживаемую Tj. В следующей таблице приведены действия, предпринятые для схемы ожидания ожидания и раны:

                           wait-die         wound-wait
Ti is younger than Tj      Ti dies          Ti waits
Ti is older than Tj        Ti waits         Tj aborts

Обе схемы предпочитают более старые транзакции со старой меткой времени.

Ответ 3

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

Если младший запрашивает ресурс, хранящийся в старой передаче., в ожидании/умереть, он может подождать, чтобы проявить уважение как Старый транс. Если младший просит ресурс, хранящийся у старого транс., в ране/умереть, он будет вынужден откат как Старый транс.

В обеих схемах старые никогда не теряются.

Refer: https://www.tutorialspoint.com/dbms/dbms_deadlock.htm

Ответ 4

wait-die: когда более старая транзакция пытается заблокировать элемент БД, который был заблокирован более молодой транзакцией, она ожидает. Когда младшая транзакция пытается заблокировать элемент БД, который был заблокирован более старой транзакцией, она умирает.

wound-wait: Когда более старая транзакция пытается заблокировать элемент БД, который был заблокирован более молодой транзакцией, это ранит более раннюю транзакцию. Когда младшая транзакция пытается заблокировать элемент БД, который был заблокирован более старой транзакцией, она ожидает.


Рекомендации: