锁定

IBM® i 数据库具有内置记录完整性。 系统根据 ILE C/C++ 程序打开文件的方式来确定锁定条件。 此表显示有效的打开方式以及与其关联的锁定状态:

表 1. 打开方式的锁定状态
open mode(打开方式) 锁状态
r 或者 rb 共享以进行读取 (*SHRRD)
a, w, ab, wb, a+, r+, w+, ab+, rb+, wb+ 共享以进行更新 (*SHRUPD)
在打开文件之前,可以使用 "覆盖数据库文件" (OVRDBF) 命令或 "分配对象" (ALCOBJ) 命令来更改文件的锁定状态。 例如, ILE C 程序可以使用 system() 函数来调用 ALCOBJ 命令:
     
system("ALCOBJ OBJ((FILEA *FILE *EXCLRD))");

如果打开文件以进行更新,那么如果未指定 __NO_LOCK 选项,那么数据库将锁定读取或定位的任何记录。 这意味着不能将锁定的记录锁定到任何其他打开的数据路径,无论该打开的数据路径是由另一个程序打开的,甚至是由同一程序通过另一个文件指针打开的。

成功读取并锁定另一条记录将释放对先前锁定的记录的锁定。 如果在任何读操作上指定了 __NO_LOCK 选项,那么不会释放先前锁定的记录上的锁定。 您还可以使用 _Rrlslck() 函数来释放对记录的锁定。