複数のパソコンで排他制御するには?


排他制御の初心者  2009-05-06 00:43:45  No: 34274

現在、複数のパソコンで同じファイルを書込み可能なプログラムを作成しています。
上記のファイルは読み込みのみを行うプログラムもあり、ファイル書込み中でも読み込み可能としたいため、排他制御を行っていませんでした。
しかし、上記のファイルを書き込む複数のプログラムで整合性がとれない問題が発生しました。

そこで、質問です。
ネットワークで繋がった複数台のパソコンでMUTEXの様な制御はできないものでしょうか?
どなたかのご教授お願いします。
(ファイルを書込み中、他のパソコンで同じファイルに書き込む処理をWait状態にしたいと思っています。)


ぺろ  2009-05-06 19:01:48  No: 34275

mutexも知らなかったど素人なんですが、何か参考になれば・・・、っていうかこのくらいの事は思いついているかもしれません。^^;

Delphiで、ロック関数のような者があるのかは分かりませんが。

PHPで、どの環境でも使えそうな方法として、処理の間ファイルの名前を変えちゃう、って方法があります。
人によってはフォルダを作っちゃうとか。
フォルダがあったり、名前がなかったら、数秒ループして待つ。
ダメなら、エラーで。
もちろん、最後にはフォルダを消したり、名前を変えたり・・・。

まぁ、何らかで、処理ができないと、アレなんですが。

他にも、ファイルを読み取り専用にしたり、何らかでフラグを立てるとかなんですかね?
http://mrxray.on.coocan.jp/Delphi/plSamples/780_FileInfoListETC.htm
読み取り専用のを、読み書きで開こうとするとエラーになったような。
エラーになったら、「誰かが開いているよ!」とか、表示で。
オフィスはこんな感じ?

一応、最後に私は素人もいい所なので、あまり信用しないように。^^;


くらら  2009-05-07 07:28:33  No: 34276

ネットワークは知らんが、
TFileStreamを使ってfmShareDenyWriteで開くとか?


monaa  2009-05-07 23:23:22  No: 34277

そのファイルの仕様に合わせた設計が必要だと思います。
たとえば、書き込みのみで削除しないのであればアクセスログのような
形式にすればよいし、削除もあり得るなら、書き込み前に、更新をチェックさせれば良いだけです。
まさに書き込み中のバッティングだけを注意したければ、書き込み直前に
ロック、書き込み終了後にロック解除すればよいだけですからさほど難しい
動作ではないともいます。
細かな仕様で動作が異なるプログラムはなかなかコンポーネントとして公開
されづらいので、プログラマの腕の見せ所だとおもいます?


deldel  2009-05-08 01:28:16  No: 34278

ネットワーク通信でファイルの読み書き管理をするのもいいと思います。

1台親分PCを決めて、ファイルに書き込みたいときは親分に許可を得る。
親分は誰もファイルに書き込み中で無ければ許可を出す。
書き込み中なら許可を出さない。
許可を得たPCはファイルへの書き込みを終了すると、親分に終了を通知する。


違っているかも知れないけど  2009-05-08 02:53:37  No: 34279

ひとつのやり方..として。

・ファイルを読むとき時間を少し置いて2度読みして
  同じだったら、次の処理を行う。
  (余り複雑な処理には向いてないかも)

・使われる複数のPG同じように作成されるものとして
  思い切ってDBにすればかなり楽になるのでは?

..こんな手はどうですか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加