タスクのネストとロック

マルチユーザ環境 > 並行性

タスクまたはプログラムが呼び出されると、現在のレコードの処理が一時中断され、その後、そのタスクまたはプログラムが完了すると処理が再開されます。その間、呼び出されたタスクまたはプログラムからは、現在のレコードの項目全てに対してアクセスが可能になります。

プログラムの場合、項目へのアクセスはパラメータを介して行われます。一方、タスクの場合、アクセスは直接実行されます。タスク、プログラムでは、どちらの場合も、現在のレコードの項目に対して更新を行うことができます。その場合、更新時のロックの状態が問題になります。ユーザによるレコードの変更では、ロック方式として「入力時」が設定されている時には(ロック方式は[タスク特性]ダイアログで設定できます)、レコードの変更が始まると同時にロックがかけられます。

タスクやプログラムを使用して現在のレコードを変更する場合も、レコードをロックしておくこと重要です。つまり、子タスクやプログラムでは相応の処理が実行され、処理の完了に時間もかかります。このため、タスクやプログラムの実行中は、他のユーザには現在のレコードに対して変更ができないようにしておくことが必要になります。変更が可能な場合、他のユーザによってレコードが操作されているため、タスクやプログラムの終了時に変更をディスクへ書き込めないということも起こります。

以上のことから、呼び出したタスクやプログラムで現在のレコードを変更する時には、あらかじめレコードにロックを設定しておきます。ただし、タスクやプログラムでレコードの更新を行わない時には、ロックは必要ありません。

タスクやプログラムでレコードの更新を行う時には、[コール特性]の[ロック]特性を使用してレコードにロックをかけるかどうかを指定できます。指定できる値は、次の通りです。