- 1 名前:nobodyさん [02/06/23 10:18 ID:eY2l+Gw1]
- どんな環境でも使えて、軽くて、頑丈なロックを考えようじゃありません
- 848 名前:nobodyさん mailto:sage [2005/12/11(日) 11:36:06 ID:???]
- わぁ。。 もっとシンプルなやり方あるのにぃ〜
- 849 名前:nobodyさん mailto:sage [2005/12/11(日) 15:20:09 ID:???]
- my ( $filename ) = @_; まで読んだ。
- 850 名前:nobodyさん mailto:sage [2005/12/11(日) 23:38:47 ID:???]
- どうせ>>848は、「じゃあ、そのやり方を書いてみろ」
と言ったところで、その案に穴があるか、書けないか どっちかだろ?…という訳で、とりあえず >>848 じ ゃ あ 、 そ の や り 方 を 書 い て み ろ
- 851 名前:nobodyさん mailto:sage [2005/12/12(月) 10:42:51 ID:???]
- unlinkしてからcloseもだめです。
(Aが正常にロックを取得した状態から) B: open A: unlink C: open A: close B: flock(成功する) C: flock(成功する) flockを使うときはロックファイルは一度作ったら消さないのが わかりやすい。 どうしても削除したければ、その操作をするためのロックを 別にするとかややこしいことをする羽目になる。
- 852 名前:nobodyさん mailto:sage [2005/12/12(月) 21:10:57 ID:???]
- >>851
ん?Aがロックした状態なんだよね? B: open -> Aがロック中なので開けない A: unlink -> 自分がロック中なので削除できる C: open -> Aがロック中なので開けない A: close -> 自分のロックを外す B: flock(成功する) -> Bがロック C: flock(成功する) -> Bがロック中なので開けない…のでわ?
- 853 名前:nobodyさん mailto:sage [2005/12/12(月) 21:21:39 ID:???]
- >>852
flockによるロック中でもopenはできるのでBはopenできるし、 Aが削除した後はそのファイルは存在しないんだから、 Cは新たに同じ名前の別のファイルを作ってopenできる。 そしてことのきBとCがそれぞれロックファイルだと思って 開いたファイルは実は別のものになるというのが問題 なのです。
- 854 名前:nobodyさん mailto:sage [2005/12/12(月) 22:29:46 ID:???]
- >>853
削除したらロックが外れるのは初耳だ。 つちの環境だと open -> unlink -> sleep(10) -> close で、sleep(10)の間はflockできないんだが…。 >flockによるロック中でもopenはできるので >>833(845)のソースではopenする前にflockの 確認してると思うけど、そりゃ、perlが内部で flock処理に入ったタイミングで他プロセスが openしたらできるかもしれないが、そしたら flock自体意味無しって事になるぞ?
- 855 名前:nobodyさん mailto:sage [2005/12/12(月) 22:33:12 ID:???]
- 正:うちの環境
誤:つちの環境 とりあえず>>853は>>833(845)のソースを実際に実行して 穴があってから発言したら? "俺予想"だけで発言しても意味無いよ。
- 856 名前:nobodyさん mailto:sage [2005/12/12(月) 22:39:11 ID:???]
- >>854
削除したらロックがはずれるのではなくて、同じ名前のロック ファイルを別に作れてしまう。sleep(10)の間にロックファイルを openしようとしたら存在しないので新しいファイルが作られてしまう から、当然flockもできるでしょ。 > openする前にflockの 確認してると思うけど flockはopenした後のファイルハンドルに対する操作 だから、openしてないのにできるわけないよ。ロックファイルの openと操作したいファイルのopenを混同してない?
- 857 名前:nobodyさん mailto:sage [2005/12/13(火) 00:46:00 ID:???]
- package filelock;
や sub open や sub close 見ただけで、他のところ見る気なくすね。
- 858 名前:nobodyさん mailto:sage [2005/12/13(火) 01:24:36 ID:???]
- >>856
なるほどね。 しかし、open→flockの間にflockされる問題を回避する事なんてできるの? >>857 スレタイを百万回読んでスレの趣旨が名前なんて関係無いという事に気付け。
- 859 名前:nobodyさん mailto:sage [2005/12/13(火) 23:21:49 ID:???]
- > しかし、open→flockの間にflockされる問題を回避する事なんてできるの?
げらげら sub openとか、package filelockなんか平気で使ってる奴はやっぱりレベル低いねえ。
- 860 名前:nobodyさん mailto:sage [2005/12/14(水) 00:31:33 ID:???]
- せっかくのflockが泣いてるぜ。。
- 861 名前:nobodyさん mailto:sage [2005/12/14(水) 05:19:12 ID:???]
- >>859
漏れは>>858だけど>>833じゃないんだけどなぁ。 なんか、このスレは文句ばっかりで意欲的に書き込んでる>>833を 援護しただけなんだけど、文句言うだけがスレの趣旨みたいね。 スレ汚しスマソ。
- 862 名前:nobodyさん mailto:sage [2005/12/14(水) 07:59:40 ID:???]
- > しかし、open→flockの間にflockされる問題を回避する事なんてできるの?
じゃなくて、その問題が起きないようにしないとロックになってないわけよ。 一番簡単なのは851で指摘してる通りロックファイルを削除しないこと。 ただの文句としか言えない書き込みがあるのも確かだが、まじめに バグを指摘してるのにひとくくりにして文句とか言われてもなぁ。
|

|