いま、いろいろと、データや処理の一貫性について、議論しているが、この議論は、並行状況におけるものではない。
つまり、
Aのプロセスで、X,Yを出力し、
Bのプロセスで、XとYを入力し、Zを出力
Cのプロセスで、YとZを入力し、Wを出力する
場合、Bよりも前に、Aが行われるはずであり(でないとX、Yが入力できない)
Cよりも前に、Bが行われるはずである(でないと、Zが入力できない)
なので、A、B,Cの順におこなわれるはずであるというののチェックの話をしている。
しかし、ここで、Bのプロセスについて、細かに考えよう。
Bのプロセスでは
(1)まず、Xを入力する
(2)Xをある程度処理し、Vにする
(3)つぎにYを入力する
(3)VとYを処理してZを作成する
という手順だったとする。
このとき、(2)のときに、他のプロセスがYを削除してしまったらどうなるか。。。
(3)が処理できず、エラーになる。
ということで、並行処理の場合には、問題が起こる。
この解決法の1つとして、論理削除がある。
物理的に削除するのでなく、削除フラグをONにするだけなら、
(3)の状態で(削除フラグONになった)Yを利用すればよいだけなので、問題ない。
その際、Yがたとえばファイル名だとしたら、論理削除する場合、同名のファイル名をつけられる可能性があるので((論理)削除後、同名のファイルを新規作成した)、ファイル名のようなものではなく、論理削除したものも含めて、一意にする必要がある(Autoインクリメントすればいい)
この場合、プロセスの開始時に、入力資源のIDをすべて確保しておくことになる。
そして、論理削除の場合、じゃ、実際に物理的にいつ削除するの?っていうのが問題になる。
変数を上書きするのでなく、1回代入して、次、代入するときは、同じ変数名でも別領域をとる(たしか、MLってそうじゃなかったっけ?)もおんなじ理屈?