- ベストアンサー
ファイルのロックについての質問
- サブルーチンaとサブルーチンbのファイルロックの違いについて質問です。
- サブルーチンaではファイルの書き込み処理も行っているため、ロック処理が必要ですが、サブルーチンbでは書き込み処理がないためロック処理は不要です。
- ただし、同じファイルを読み込む場合でも、他のプロセスやスレッドから同時に書き込みが行われる可能性がある場合は、サブルーチンbにもロック処理を追加した方が安全です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1 です。 なんとなく、ご理解いただけたようで。 私の文章にも、ちょっとミスがありまして、 おわかりのようですが、文章中盤でのAさん、はA1さん、です。m(_ _)m それで、追記です。 じゃあ、デッドロックが出にくくするのには、どうするか?ですが、 複数の処理が実行される場合には、それが別々の処理でも、 可能な限り更新順序を一定にするのが基本的に楽な方法です。 ここで(また?・・すみません)プログラムが PGα と PGβ があって A1さんは PGα を実行して A2さんは PGβ を実行しているとします。 先ほどの例では、 PGα は α の次に β を PGβ は β の次に α を 書き換える、との例でしたが(説明用に) PGα も PGβ も 書換順を α の次に β とすると デッドロックは起こり得ません。 現実、このように綺麗に作ることは難しいのですが、 考え方として参考になれば。
その他の回答 (1)
- id357
- ベストアンサー率29% (39/133)
普通の処理であればロックの必要はありません。 A1、A2、B1の三人がアクセクしたとします。 A1,A2の人は書き換え、B1は読むだけとした場合 ロックをかけていない場合 1、A1読込、A2読込、A1書込、A2書込 2、A1読込、A2読込、A2書込、A1書込 のような可能性があります。 1.の場合、A1さんの書込データは消えてしまします。 2.の場合、A2さんの書込データは消えてしまします。 これを防ぐための、ロックの処理をします。 ですので、B1が読むだけであればロックの処理は必要でなく、 かえってよけいな処理のため負担をかけることになります。 気をつけなければいけないのは、デッドロックです。 A1さん、と、A2さん、が、別の処理をしていたとします。 二人ともたまたま同じ二つのデータを扱おうとします。(実際はPG) データは、αとβで、 A1さんは αとβ を書き換えようとします。 A2さんは βとα を書き換えようとします。 そうすると A1さんPGは α を書き換えたあと、β を変更しようとしますが、 A2さんPGが β をロックしているのでアクセスできません。 A2さんPGも、Aさんが α をロックしているのでアクセスできません。 当然、αとβ は同時更新しないと関連が崩れますので、 個々にロックをかけるわけにはいきません。 この四面楚歌の状態が有名なデッドロックです。 一つのデータなら、最初の説明でお分かりと思いますが、 複数データになると、そのような配慮も必要になります。
お礼
申し訳ございません、勘違いしていたようです。 解説していただいた内容をよく考えてみましたところ、 A1読込、B1読込、A1書込 の処理では大丈夫だということがわかりました。
補足
有難うございます。とてもわかりやすく勉強になりました。 A1、B1の二人がアクセスしたとして、 1、A1読込、B1読込、A1書込 このような場合、A1さんの書込データは消えることはないのでしょうか?
お礼
ご丁寧に有難うございました。 今後、勉強していく上で参考にさせていただきます。