記事一覧

深刻・・・かもしれないバグ

最近、自分の作っているWEBアプリやWEBアプリ的なものに、深刻・・・かもしれないバグがあることに気付きました。

いや、滅多に無いバグだと思うんですが(今のところ見たことありません)起こらない可能性が無いわけではないと思うんです。

内容は、
  1. プロセスAがデータxを読み込む
  2. データxを処理してデータyを作る
  3. データyを書き込み
  1. プロセスBがデータxを読み込む
  2. データxを処理してデータYを作る
  3. データYを書き込み

がほぼ同時に実行された場合、「ごく稀にデータyが書き込まれる前にデータYが書き込まれる場合があるのではないか」ということです。

今は↓のような状態だからです。
open

flock

読み込み

close

処理
この青字の部分に隙(他のプロセスが書きかえれる)がある⇒「処理したのにされてない」みたいな事態が発生?
open

flock

書き込み

close


これがひとつのファイルでの話ならいいんですが、複数のファイルを読み込んで処理していく場合に、それぞれのプロセスで処理時間が大きく異なると、こんなことが起こらない可能性が無いわけではないのだろうかと・・・

解決策はわかっていて、
open

flock

読み込み

処理

書き込み

close


とすれば解決できると思うんですが、どうでしょうか。

「これでは解決できない」とか「もっと効率の良い方法がある」とかあったら是非教えてください。
(今作っているWEBアプリ的なものは出来る限りバグを減らしておきたいので)

コメント

コメントの投稿

非公開コメント

プロフィール

JDB Luigi

Author:JDB Luigi
どこにでもいるようなありふれた人間・・・という訳でもなく、かと言って怪しい宗教を信仰する変人という訳でも無い。

基本的に掲載しているコード等は煮ていただいても焼いていただいても結構ですが、利用は自己責任にてお願いいします。
また、バグ・アドバイス等もしあればよろしくお願いします。