112 Глава3
ключительное управление; если в ресурсы не требуется вносить изменений, програм-
ме следует запросить разделяемое управление, позволяющее осуществлять доступ 
совместно с другими программами, не требующими исключительного управления. 
Если ресурс недоступен, система приостанавливает выполнение запрашивающей 
программы до тех пор, пока ресурс не освободится. Когда программе больше не тре-
буется управление ресурсом, она использует макрос DEQ для его освобождения.
Что такое блокировка?
Посредством блокировки (locking) система осуществляет синхронизацию использо-
вания системных ресурсов авторизованными подпрограммами и (в Parallel Sysplex) 
процессорами. Блокировка (lock) представляет собой именованное поле в памяти, 
указывающее, используется ли ресурс и кто его использует. В z/OS существует два ти-
па блокировок: глобальные блокировки, предназначенные для ресурсов, связанных 
с несколькими адресными пространствами, и локальные блокировки, предназначен
-
ные для ресурсов, назначенных определенному адресному пространству. Глобальные 
блокировки накладываются для подпрограмм, не допускающих многократное или 
совместное использование, и различных ресурсов.
Для того чтобы использовать ресурс, защищенный блокировкой, подпрограмма 
должна сначала запросить блокировку для этого ресурса. Если блокировка недоступ-
на (другими словами, если она уже получена другой программой или процессором), 
то программа или процессор, запросившие блокировку, предпринимают действие, 
зависящее от того, используется ли спин-блокировка (spin lock) или отсроченная 
блокировка (suspend lock):
• Если спин-блокировка недоступна, запрашивающий процессор продолжает 
проверять доступность блокировки до тех пор, пока другой процессор ее не 
освободит. Как только блокировка освобождена, запрашивающий процессор 
может получить блокировку и таким образом получить управление защищен-
ным ресурсом. Большинство глобальных блокировок являются спин-блоки-
ровками. Держатель спин-блокировки должен быть недоступен для большинс-
тва прерываний (если прервать его выполнение, он может больше никогда 
не получить управление, чтобы освободить блокировку).
• Если отсроченная блокировка недоступна, единица работы, запрашивающая 
блокировку, приостанавливается до тех пор, пока блокировка не будет доступ-
на. На запрашивающий процессор передается другая работа. Все локальные 
блокировки являются отсроченными.
Вам может быть интересно, что случится, если каждый из двух пользователей запро-
сит блокировку, удерживаемую другим? Если каждому из них придется ждать вечно, пока 
другой не освободит блокировку первым, возникает тупиковая ситуация. В z/OS такая 
ситуация называется тупиковой ситуацией (deadlock). К счастью, используемая в z/OS 
методология блокировки не допускает возникновения тупиковых ситуаций.
Для того чтобы избежать тупиковой ситуации, блокировки организованы в иерар-
хию и процессор или подпрограмма может запросить только блокировки, располо-
женные выше по иерархии, чем блокировки, удерживаемые ей на данный момент. 
Например, тупиковая ситуация может возникнуть, если процессор 1 удерживает бло-