Я считаю что: - от замены SHR на OLD ничего не изменится - этот вопросик вовсе не глупый Инициатор выдает ENQ на все наборы данных, описанные во всем задании до иниицирования программы первого шага (MYPGM1). Поскольку во втором шаге DISP=MOD, набор FORMAT.FILE будет запрашиваться монопольно (exclusive), а не разделяемо (shared). Вот если бы второго шага не было, разница между SHR и OLD, естественно, была бы. Такая логика инициатора позволяет избежать deadlock: //JOBA JOB // EXEC PGM=IEFBR14 //A DD DSN=DATA1,DISP=OLD // EXEC PGM=IEFBR14 //B DD DSN=DATA2,DISP=OLD
Если бы ENQ для наборов делалось для каждого шага а не для всего задания сразу, одновременный запуск заданий JOBA и JOBB приводил бы к взаимоблокированию (deadlock).
Сообщение отредактировал Gregory - Сб, 22.08.2009, 00:21
Это был вопрос с подвохом. Я пол дня потратил, пока догадался книжку перечитать. (а так уже и ENQ печатал, тоесть сам видел, что так и происходит) Снимаю шляпу перед теми, кто это уже знал Худая корова еще не газель!
Description: MVS Device Allocation has the responsibility of ensuring the integrity of data sets and devices. For data sets, it does this using a GRS ENQ for each data set. When the JCL coder requests DISP=OLD, DISP=NEW or DISP=MOD, Allocation requests an exclusive ENQ with major name SYSDSN and a minor name of the data set. If the JCL coder uses the other disposition, DISP=SHR, Allocation obtains the same ENQ, but with shared control. Once obtained, the ENQ is not released until the last step in which it is used. So, for a job with five steps, if the first step codes a data set with DISP=NEW and then uses the data set again in step 5 with DISP=SHR, the ENQ is held for all five steps. Further, the ENQ's level of control, initially exclusive in step 1, is never changed, even though step 5 only needs shared control. In this way, Allocation ensures that the data set integrity is not compromised in any way until the job that needed exclusive control gives up the data set or ends. This is the behavior without the new DSENQSHR function. In the same example but using the new DSENQSHR function, the SYSDSN ENQ would be downgraded from exclusive control to shared control after step 1 since exclusive control is no longer needed for the data set. This allows other jobs which attempt to allocate the data set to have access earlier than the legacy behavior. This parallelism will reduce the IEF099I/IEF861I/IEF863I messages which indicate that a particular job is waiting the data set.
When change was introduced: z/OS V2R1.
Таким образом, в z/OS 2.1 с активированной функцией DSENQSHR задание вида