COBOL言語の「LOCK句」とは?ファイルロックについて知ろう | 用語辞典

COBOL(コボル)言語の予約語LOCK句を使った命令文の書き方とは

辞典・辞書-LOCK-イメージ

COBOL(コボル)言語のLOCK句とは?

COBOL(コボル)言語におけるLOCK句とは、同時に動作する複数のプログラムにより、同一のファイルのレコード操作へのアクセスを制御したい場合に使用します。

書き方:

LOCK MODE IS ロックモード [WITH LOCK ON [MULTIPLE] [RECORD/RECORDS]]

LOCK句はSELECT句の中で記述します。指定するロックモードには「AUTOMATIC(自動ロック)」「MANUAL(手動ロック)」「EXCLUSIVE(排他ロック)」があります。

  • AUTOMATIC(自動ロック)

入出力両用で開かれたファイルからレコードにアクセスすると、自動でレコードがロックされます。入力用で開かれたファイルに対してはロックされません。

  • MANUAL(手動ロック)

手動ロックを指定したファイルからレコードにアクセスするとき、READ文で「WITH LOCK」を指定された場合のみロックされます。自動ロック同様入力用で開かれたファイルに対してはロックされません。

<手動ロック時の記述例>

SELECT ファイル名項目

   ASSIGN TO データ名 [ORGANIZATION IS ファイル編成]

   LOCK MODE IS MANUAL

...

READ ファイル名項目 WITH LOCK

  • EXCLUSIVE(排他ロック)

排他ロックを使用すると、ファイルを開いたときにそのファイルをロックすることができます。OPEN文で、排他ロックを抑制することもできます。

  • 複数のレコードロック

複数レコードを指定する場合は自動ロックまたは手動ロック時に「LOCK MODE IS MANUAL」のあとに「 WITH LOCK ON MULTIPLE RECORDS」を記述します。

<複数レコードロックの記述例>

LOCK MODE IS MANUAL WITH LOCK ON MULTIPLE RECORDS

使用例:

ファイルのレコードを自動ロックする簡単なサンプルを紹介します。

読み込むファイルは事前に用意しておきます。ここでは、行順編成のフラット形式で以下のように記述したレコードを使用します。

test.txt-------------------

AAAAA

BBBBB

CCCCC

DDDDD

----------------------------

辞典・辞書-LOCK-使用例

実行結果:

辞典・辞書-LOCK-実行結果

紹介したサンプルではファイルをAUTOMATIC(自動ロック)で指定し、ファイルをI-O(入出力両用)モードで開いています。

自動ロックを指定しておけば、READ文のファイルを読み込むときに自動的にレコードがロックされるため、他のプログラムから同じファイルに対してレコード操作ができなくなります。

LOCK句のCOBOL(コボル)言語における基本事項やルールについて

 
  1. LOCK、MODE IS、ロックモードなどの間の空白や改行は自由に指定できます。
  2. ファイルのロックモードはAUTOMATIC(自動ロック)」「MANUAL(手動ロック)」「EXCLUSIVE(排他ロック)」のいずれかを指定する必要があります。
  3. レコードのロックには「単一レコードロック」と「複数レコードロック」の2種類があります。
  4. 単一レコードをロックする場合は、1回に1つのレコードのみロックされます。ファイルの入出力操作を行うごとに前のロックが開放されます。
  5. 複数レコードをロックする場合は、同時に定義した複数のレコードのロックを保持できます。前回のロックされているレコードも開放されずに、ロックされた状態になります。
  6. レコードロックはファイルを閉じる、COMMIT文、ROLLBACK文を実行する、ロックされたレコードの削除などの操作を行うとレコードが開放されます。

COBOL(コボル)言語のLOCK句を扱う上での注意点

 
  1. LOCK MODE ISでファイルのレコードをロックする場合、入力用で開かれたファイルはロックが無効となります。
  2. MANUAL(手動ロック)を指定した場合は、READ文の後にWITH LOCK句を指定しなければロックが無効となります。以下のようにWITH LOCK句を指定しないと無効になりますのでWITH LOCK句の記述漏れに注意しましょう。述
   
  1. FILE-CONTROL.
  2. SELECT TEST-FILE ASSIGN TO 'test.txt'
  3. ORGANIZATION IS LINE SEQUENTIAL
  4. LOCK MODE IS MANUAL
  5.  
  6. ...
  7.  
  8. READ TEST-FILE WITH LOCK
  9. AT END
  10.  
  11. NOT AT END
  12.  
  13. END-READ

LOCK句を使ったCOBOL(コボル)プログラムの活用法

ファイルを扱う上で、レコードへのアクセスの競合を防ぐためにLOCK句は重要な手段です。ここでは、LOCK句を使用した活用法として、複数のレコードを手動でロックする簡単な方法を紹介します。

読み込むファイルは使用例で紹介したファイルと同じものを使用しています。

   
  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. LOCK_SAMPLE02.
  3. ENVIRONMENT DIVISION.
  4. INPUT-OUTPUT SECTION.
  5.  
  6.  
  7. FILE-CONTROL.
  8. SELECT TEST-FILE ASSIGN TO 'test.txt'
  9. *>行順編成ファイル
  10. ORGANIZATION IS LINE SEQUENTIAL
  11. *>手動で複数のレコードをロック
  12. LOCK MODE IS MANUAL WITH LOCK ON MULTIPLE RECORDS
  13. FILE STATUS IS IN-FILE-STATUS.
  14.  
  15.  
  16. DATA DIVISION.
  17. FILE SECTION.
  18. FD TEST-FILE.
  19. 01 IN-FILE-REC PIC X(5).
  20.  
  21.  
  22. WORKING-STORAGE SECTION.
  23. 01 IN-FILE-STATUS PIC XX.
  24.  
  25. PROCEDURE DIVISION.
  26.  
  27. OPEN I-O TEST-FILE.
  28.  
  29. PERFORM UNTIL IN-FILE-STATUS NOT = "00"
  30.  
  31. *>ファイルを読み込みレコードをロックする
  32. READ TEST-FILE WITH LOCK
  33. AT END
  34. DISPLAY "READ END";
  35. NOT AT END
  36. DISPLAY IN-FILE-REC
  37. END-READ
  38.  
  39. END-PERFORM.
  40.  
  41. CLOSE TEST-FILE.
  42.  
  43. STOP RUN.

実行結果:

辞典・辞書-LOCK-実行結果

サンプルでは、LOCK句でMANUAL(手動ロック)及び複数レコードのロックを指定しています。

「LOCK MODE IS MANUAL WITH LOCK ON MULTIPLE RECORDS 」

ファイルを入出力両用モード(I-O)で開き、手動ロックを指定しているので、READ文のあとに「WITH LOCK」を記述しています。

この記事を読んだ人は、こちらの記事も読んでいます

【未経験者歓迎】COBOLプログラマー・システムエンジニアの募集

株式会社COBOLの求人・転職・募集情報を見る

COBOL入門のカテゴリー

取引企業様 募集中
COBOL技術者 募集
COBOL魂
読者採用
COBOL入門