- 更新の消失 T2 READ -> T1 WRITE -> T2 WRITE
- ダーティリード T2 WRITE -> T1 READ -> T2 WRITE
- 非再現リード T1 READ -> T2 WRITE -> T1 READ
- 正常 T1 READ -> T2 READ -> T1 READ
ちょっと難しそうですが、補足すると、こうなります。
- 更新の消失 T2 READ -> T1 WRITE (->T1READ) -> T2 WRITE
- ダーティリード T2 WRITE (->T2READ) -> T1 READ -> T2 WRITE
- 非再現リード T1 READ -> T2 WRITE (->T2READ) -> T1 READ
こういうような事をじっくり解説した本は、おそらくトランザクション処理(上)、トランザクション処理(下)を置いて他には皆無であり、選択肢が無いと感じています。この本、豚のように厚くて重たくて割れやすい上に書いてある事が一部おかしいのではないか?という代物で、読もうと思ったら拷問以外の何者でもないのですが、他に同じような本がありません。もし、他にあれば推薦して欲しいです。
脱線してしまいましたが、従って、スレッド間で共有してアクセスする変数は、アクセス境界で整合性を保てるように不整合となるアクセスを保護(ブロック)しなければなりません。カウンタやポインタをスレッド間で共有する場合には、整合性を取れないと、お亡くなりになったり、悲惨な目にあいます。
スレッド間で共有すべき変数は最小にして、かつ、最短の処理で
- READ -> 処理 -> WRITE
- READ -> 処理
・・・続く
0 件のコメント:
コメントを投稿