为什么有时有重复纪录会造成程序死循环

发布于 2022-08-23 03:23:19 字数 2186 浏览 12 评论 9

以下就是一个重复纪录回造成死循环的典型例子。
F_KEY是FILE1的第一个KEY.

STD_RTG是被程序许多地方调用的标准子程序。程序员不动脑筋地就把它抄过来使用。
如果程序中有两个或以上的纪录的KEY值相同,那么当READ读到第二条重复的纪录之后,
本来FILE1的指针时指向第二条重复的纪录后面那条记录的,可是子程序中的CHAIN又把
FILE1中的指针扳回到第一条重复纪录的右面,也就是第二条重复的前面。。。

F_KEY是文件FILE1中的KEY FIELD.

C           KEY1        SETLL  FILE1
C                           READ   FILE1
C                           DOW   NOT %EOF(FILE1)
C                           ...
C                           EXSR    STD_RTG
C                           ...
C                           READ   FILE1
C                           ENDDO
C                           ...
C           STD_RTG  BEGSR
C                           ...
C           F_KEY       CHAIN  FILE1
C                           ...
C                           ENDSR

[ 本帖最后由 franliu 于 2009-11-25 07:55 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

一抹微笑 2022-09-01 21:38:13

使用UNIQUE是一个好的办法,可是由于历史的原因,许多现成的软件包都不使用UNIQUE.
大型软件公司的产品,需要雇佣许多程序员。由于成本的关系,有所多程序员是新出炉的菜鸟。要全面控制程序质量是很困难的。一个折衷的办法就是允许重复,这样总比结果却胳膊少腿好一些。
如果你自作主张加上了UNIQUE, 那些没有出错控制的程序就成了*MSGW, 有出错控制的可能就“死人不管”假定写或者更新成功了。。。

某ERP软件中有50%程序以现有纪录中最大的流水号码加以一的办法来生成新流水号的。

这样的逻辑,在多用户环境,再加上在缓冲区里没有被写进磁盘的纪录的因素,不重复有可能吗?

要把这些烂程序重新写一遍工作量太大,没有人愿意干哪吃力不讨好的活。干这种活写不出漂亮的报告。

研发部主任宁可计划发出新的版本或者至少 NEW RELEASE, 可以借此向大老板邀功。

最多做个重新排序的程序应付一下。。。

这就是现状。。。

还有一点要提一下,使用了UNIQUE之后,为了防止重复,写纪录就不可以一块一快写了,只能一个记录一个记录写,程序运行要慢得多。

[ 本帖最后由 franliu 于 2009-11-26 15:32 编辑 ]

離殇 2022-09-01 21:29:49

我们建立的逻辑档一般不可能KEY值重复的,重复的一般写不进去

本来就要靠key值来定位查找记录,不唯一有什么用

冷心人i 2022-09-01 20:44:48

明显的和无条件的死循环通常在程序测试阶段就被排除了。只有那些隐蔽的才能通过测试,被放进实际运行的环境中去。

总之我想拿出来跟大家分享的是排除系统故障的一种思路。希望对大家有用。

而且,养成在循环内不使用任何会移动主循环内文件指针的操作的好习惯。

怀中猫帐中妖 2022-09-01 20:33:32

其实很多死循环是在不经意时才会出现的,,要是知道了在写出来就没意思了..

醉殇 2022-09-01 16:40:22

胖有形的手册里第几页介绍这种情况啊?你有没有搞错啊?请把页号告诉我。

我大略看了《手册》,他所讨论的死循环都是无条件的,属于菜鸟程序类。这类东西都不可能通过测试进入正式运行的环境。我拿出来讨论的问题是只有当有重复纪录的时候才死循环的例子。

や三分注定 2022-08-31 23:54:03

这个问题胖有型的《ILE程序员速成手册.doc》里面有详细说明,大家可以看看,
不好意思,记错名字了
http://bbs2.chinaunix.net/viewth ... p%3Bfilter%3Ddigest

[ 本帖最后由 insmile 于 2009-11-25 12:35 编辑 ]

送你一个梦 2022-08-31 17:00:56

这个例子挺经典的,,不过最好逻辑文件的key该为唯一的,比较好..

格子衫的從容 2022-08-31 09:53:09

这个是值得深思,但是一般情况下都不会去用同一个文件来读两次的,要做也是两个不同的LF

幽梦紫曦~ 2022-08-30 01:54:44

发生死循环多了一个调试的思考方法

[ 本帖最后由 lizi211314 于 2009-11-25 09:14 编辑 ]

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文