首页 > 解决方案 > 调用程序的锁定问题

问题描述

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

标签: sqlibm-midrangerpglerpg

解决方案


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

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

通常更新 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;

推荐阅读