调用程序时的锁定问题



我有50个程序调用的pgmA。pgmA在输入模式下有详细文件,50个调用程序中的一些在更新模式下有详细文件,根据新的要求,我将以XML格式在pgmA中获得详细文件记录,需要打破和更新,解析很好,但我担心在pgmA中更新详细文件,因为调用程序可能会锁定记录,进一步我可能会遇到被同一作业锁定的问题!分析这些程序也有点困难,因为它们多次调用PgmA,代码又大又旧,有什么建议如何在没有锁的情况下更新详细文件吗?建议我一个解决办法。

简短的回答是:如果不先锁定记录,就无法更新记录。

但是您可以调整您的锁定方案以最小化锁定的影响。您可能需要在调用pgmA的50个程序中执行此操作。方法是在不带锁的情况下读取要更新的记录,进行处理,然后在更新之前再次读取,这次带锁。这样,如果您的处理是长时间运行的(通常是有用户输入的),锁定时间将被最小化。

通常在每条记录中存储一个更新id,它只是一个序列号,以帮助检测在第一次和第二次读取记录之间由另一个进程对记录所做的更改。另一种检测这些更改的方法是将记录存储在第一次读取的数据结构中,然后在更新之前将初始读取与第二次读取进行比较。

通过RLA处理,它看起来像这样:

chain(n) (key:fields) file old;
if %found(file);
// process record
chain (key:fields) file new;
if %found(file);
if new <> old;
// record changed between reads - reprocess
else;
// apply changes to new
update record new;
endif;
else;
// record deleted between reads - reprocess
endif;
endif;

最新更新