次の表は、2つのタスクで同じデータソースに対して同時にアクセスが実行される場合、そのデータソースの共有の仕組みをまとめたものです。表で、マイナス記号(-)がある場合、2つのタスクのモードが矛盾を起こすことを示しています。これに対して、プラス記号(+)がある場合、2つのタスクのモードは矛盾を起こさず、正常に機能することを表しています。
|
プロセスA |
|
|
|
|
|
|
|
|
アクセスモード |
読込 |
|
|
書出 |
|
|
|
|
|
共有 |
読込 |
書出 |
なし |
読込 |
書出 |
なし |
プロセスB |
読込 |
読込 |
+ |
+ |
- |
- |
- |
- |
|
|
書出 |
+ |
+ |
- |
+ |
+ |
- |
|
|
なし |
- |
- |
- |
- |
- |
- |
|
書出 |
読込 |
- |
+ |
- |
- |
- |
- |
|
|
書出 |
- |
+ |
- |
- |
+ |
- |
|
|
なし |
- |
- |
- |
- |
- |
- |
例えば、
タスクA でテーブルがR /R モード(アクセスモードがR 、共有モードがR の意味)で開かれている場合、タスクBでは、そのテーブルをR /R またはR /W で開くことができます。
タスクA でテーブルがR /W モードで開かれている場合、タスクB では、そのテーブルをR /R 、R /W 、W /Wで開くことができます。
矛盾が発生した場合、後からアクセスしたプロセスでテーブルロック待ちが発生し、次のプロセスではテーブルロックが解除されるまで待たされます。