[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/10 00:43 / Filesize : 262 KB / Number-of Response : 974
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【Perl】ファイルロック(排他処理)について語ろう



1 名前:nobodyさん [02/06/23 10:18 ID:eY2l+Gw1]
どんな環境でも使えて、軽くて、頑丈なロックを考えようじゃありません

528 名前:nobodyさん mailto:sage [03/09/16 00:04 ID:???]
ラクダ本の見て必要無いのにseek(FH, 0, 2)とかやってる奴
何人か見た事あるので充分なのかどうかは微妙とか言ってみるテスツ。


529 名前:nobodyさん mailto:sage [03/09/16 01:04 ID:???]
最近はseek(FH, 0, 2)いらんよね

530 名前:nobodyさん mailto:sage [03/09/16 02:04 ID:???]
>>528
別にseekやってもオーバーヘッド以外の害はないんだし、害がある場合もレアケースながら
存在するので、的確かどうかはともかく、少なくとも「充分」ではあるのでは?

531 名前:nobodyさん mailto:sage [03/09/27 12:58 ID:???]
こんなロック処理はどうだ?

mkdirで新規ディレクトリを作ったうえで、ロック成立条件を満たした場合にロック完了とする。
ディレクトリ名にタイムアウト時刻と共有/排他ロックの種別を埋め込む。

共有ロック時はディレクトリ作成後に、親ディレクトリのファイルリストを取得して、
自分の作ったディレクトリよりも前に排他ロックディレクトリが作成されていなければ、ロック完了。
排他ロック時も同様に、自分の作ったディレクトリよりも前にディレクトリが作成されていなければ、ロック完了。
もちろん、ファイルリスト取得時にタイムアウト時刻を過ぎたディレクトリは消去する。

環境依存せずに、read-write lock patternをperlで実装するとこうなるね。

532 名前:nobodyさん mailto:sage [03/09/29 13:16 ID:???]
環境依存せずに。。。という話なんだけど、
flockサポートしてない環境ってそんなに一杯あるんですか?
windows 9xでサーバ立てる香具師はほっといたとして、、、
nkfのlock機構って精度低いんですか?


533 名前:nobodyさん mailto:sage [03/09/30 04:58 ID:???]
>>532
nkf の lock 機構ってのは聞いたことないんだが、

・・・っていうか、一体いつまでおんなじような議論を堂々巡りで続ける気なんですか?!?!

534 名前:nobodyさん mailto:sage [03/09/30 05:00 ID:???]
あ、ところで、 >>531 の方法は、
なかなか良さげっていうか、問題無さそうな気がするんですがどうなんでしょうね?

535 名前:532 mailto:sage [03/09/30 11:52 ID:???]
nfsの間違えでした(スマソ

536 名前:nobodyさん mailto:sage [03/09/30 12:29 ID:???]
>>534
ほぼ同じ仕様のコードが既に公開されてて、有難く使わせて頂いてます。



537 名前:531 mailto:sage [03/09/30 17:11 ID:???]
>>536
どこで公開されてたか教えれ!

538 名前:nobodyさん mailto:sage [03/10/02 03:29 ID:???]
>>536
もしかして、ここかしら?
ttp://www.mindcompass.sfcgi.com/200303.html

539 名前:531 mailto:sage [03/10/02 09:02 ID:???]
>>538
やっぱうちのサイトですか(w

で、今改良版を作ってるのですが、タイムアウト時刻をディレクトリ名にすると、同時にタイムアウト時刻が
違うロックを作ると誤動作するな。

だから、現在時刻をディレクトリ名にして、ディレクトリの作成時刻をタイムアウト時刻に変更すると言う
アクロバティックな操作が必要かもね。

改良版出来上がったら公開しますか?(y/n)



540 名前:nobodyさん mailto:sage [03/10/02 16:33 ID:???]
>>539

自作CGIを評価するスレ
pc2.2ch.net/test/read.cgi/php/1049514428/470

何これ。恥ずかしがりやさんなのかな。


541 名前:nobodyさん mailto:sage [03/10/02 22:14 ID:???]
>>540
さんくす。こんなスレがあるとは知りませんですた。
さっそくそっちのほうにageてみました。

542 名前:nobodyさん mailto:sage [03/10/03 18:38 ID:???]
>>541
いやいや何か勘違いしてない?
ファイルロックの話なんだからこのスレでいいだろう。

俺の言いたかったのは>>539の最後に(y/n)があって、
何故かpc2.2ch.net/test/read.cgi/php/1049514428/470
yと答えてたので報告したまでです。


543 名前:nobodyさん mailto:sage [03/10/03 18:51 ID:???]
>>531
これって安全そうでよさげな気はするんだけど、
ちょっと思ったんだけど、ものすごくアクセス多い場合に、
ディレクトリ作成〜ファイルリスト検査のタイムラグのせいで、
いつまでたってもだれもロックを取得できない、ってな状況になりそうな気がする。

544 名前:531 mailto:sage [03/10/05 10:57 ID:???]
新バージョンageてみました。
今度の奴は、ロックする側のプロセスがタイムアウト時間を個別に設定できます。

do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html

>>543
確かにファイルリスト検査に時間がかかるが、ならばどうしろと?


545 名前:nobodyさん mailto:sage [03/10/06 12:54 ID:???]
>>544
いや、どうすればいいか私にも思い付きません。すいません。
単にデメリットを挙げてみただけで、
だからといってその方法が使えねーとかいう気も毛頭ありません。

546 名前:531 mailto:sage [03/10/06 22:56 ID:???]
>>544>>545
さらに一念発起してrename方式に変更してロック処理にかかる負荷を低減してみました。

rename方式でテストしたらロックがぶっ壊れるなー、とか思ってたら
ロック検証用のルーチンの書き方に問題があった罠。
同じファイルを読み込みと書き込みで2回オープンして、しかもバッファ処理をカットしてなかったので、
スクリプト上では書き込んだつもりでもファイルシステム上では「まだ」書き込まれてない場合があることに
ようやく気がついた。

教訓。
ロック処理が正しくても、ファイル入出力の部分の書き方によっては思わぬファイル破損がありうる。



547 名前:531 mailto:sage [03/10/07 18:17 ID:???]
>>546
やっぱりread-write lockってむづかしいでつね。
rename方式だと、共有ロックをかけているプロセス数が分からないといつロック解除していいかわからない。
ロックプロセス数を安全に記録するために、内部で排他ロックをかけなければいけない罠w
これでどのくらいロック処理で負荷がかかるか、だな。


548 名前:nobodyさん mailto:sage [03/10/29 05:07 ID:???]
複数ファイルにまとめてロックを掛けるにはどうすれば良いのですか?

例えば掲示板で最初のページだけ静的なファイルにしたいという場合、
ログとその最初のページの両方を同時にロックしないといけないので。

FLOCKのディレクトリ版とかあれば便利なのですが…。


549 名前:nobodyさん mailto:sage [03/10/29 06:01 ID:???]
>>548
ロック開始と解除の間で必要なファイルを扱えばいいだけ

ロックの仕組みを根本的に理解していないんじゃないか?
もうちょっと勉強せい

550 名前:nobodyさん mailto:sage [03/10/29 08:13 ID:???]
【Perl】ファイルロック(排泄処理)について語ろう
pc2.2ch.net/test/read.cgi/php/1024795138/

551 名前:nobodyさん mailto:sage [03/11/03 16:44 ID:???]
>548
ttp://www98.sakura.ne.jp/~jun/perl/flock.html#02


552 名前:nobodyさん mailto:sage [03/11/05 02:38 ID:???]
>551
flockってロックしたファイルが閉じるまでに開いた他のファイルまで
全部ロックしちゃうの?


553 名前:nobodyさん mailto:sage [03/11/05 04:25 ID:???]
>>552
お前、リンク先のサイトの内容ちゃんと読んだか?

554 名前:nobodyさん mailto:sage [03/11/05 11:35 ID:???]
>>551
リンク先面白かった。初心者にもわかりやすい情報をWebで公開してくれる人って、尊敬。

555 名前:nobodyさん mailto:sage [03/11/05 14:16 ID:???]
>>553
読んだけど。
かいつまんで書くと

lockfileを開く
lockfileをロック
count.txtを開く
上書き
count.txtを閉じる
addr.txtを開く
追記
addr.txtを閉じる
lockfileをアンロック

だよね。
count.txtとaddr.txtには直接ロックかけてなくて
lockfileをロックすることによりこの二つのファイルもロックされてるらしいから
>551みたいに言った。


556 名前:nobodyさん mailto:sage [03/11/05 14:16 ID:???]
552だ。



557 名前:nobodyさん mailto:sage [03/11/05 14:28 ID:???]
ああ何となく解ってきた。
よく考えたらlockfileがロックされてるときはそこから先に進まないから大丈夫なのか。


558 名前:nobodyさん mailto:sage [03/11/08 02:04 ID:???]
ロック用ファイル作らなくても
どっちかのファイルにロックかけて最後まで開いてるままで十分だけどな。


559 名前:nobodyさん mailto:sage [03/11/08 13:26 ID:???]
>>558
あんた無茶苦茶言いますなぁ・・・

560 名前:nobodyさん mailto:sage [03/11/08 13:37 ID:???]
無茶苦茶???いったい何が???

561 名前:nobodyさん mailto:sage [03/11/08 15:28 ID:???]
>>559
count.txtにロックかけてそのままabbr.txtの処理終わるまで開いときゃ良いじゃん。


562 名前:nobodyさん mailto:sage [03/11/08 17:35 ID:???]
addrだった。

563 名前:nobodyさん mailto:sage [03/11/09 03:10 ID:???]
>>561
レアケースだろうけど
似たような事して壊れたことあるよ
無茶苦茶って事では無いだろうが、
そのやり方だと同時オープンで
2人アクセスしてきたのに1しかカウントアップしないって
ケースがタイミング良ければ発生する程度かな

564 名前:nobodyさん mailto:sage [03/11/09 10:32 ID:???]
>>561
どうやってロックするんですか?

565 名前:nobodyさん mailto:sage [03/11/09 14:47 ID:???]
>>563
なんでそうなる?単にヘボ実装だっただけじゃないの?

566 名前:nobodyさん mailto:sage [03/11/09 15:19 ID:???]
>>563
なるわけないだろうが



567 名前:nobodyさん mailto:sage [03/11/09 18:12 ID:???]
>563
単に読み込みをブロックしてなかっただけってオチなんじゃ。
それか二つのファイルでファイルハンドルを同じにしちゃったとか…。

>564
open(COUNT, "+<$cfile");
flock(COUNT, 2);
(中略)
open(ADDR, ">>$afile");
(中略)
close(ADDR);
couse(COUNT);


568 名前:nobodyさん mailto:sage [03/11/09 18:18 ID:???]
ちょっと複雑なシステムで
複数のスクリプトが複数の同じファイルを読み書きする場合は
ロック用ファイルを一つ用意する方が管理が楽なのは当たり前。

でもカウンターのようにファイルが単一のスクリプトからしか読み書きされない場合は
どちらか先に読む方のファイルをロックしておけば十分。


569 名前:nobodyさん mailto:sage [03/11/09 18:46 ID:???]
>>565
>>566
無能か?(w
ググルとたくさんでてくるぞ、そのケース

570 名前:nobodyさん mailto:sage [03/11/09 18:58 ID:???]
わけわかんね。
サーバがflockをきちんと使えないシステムを採用してたとかじゃないの?


571 名前:nobodyさん mailto:sage [03/11/09 19:03 ID:???]
>>569
きっと君と同じぐらい無能なやつなんだろうね
ここでそんなこと言ってるのも君ぐらいだし

572 名前:nobodyさん [03/11/09 19:42 ID:BVCYv2fe]
>>570,571
馴れ合いはよそでやれよ・・・
ま、>>555は書いてるとうりにすれば問題無し
わざわざ混乱させんでもよかろうに

573 名前:572 mailto:sage [03/11/09 19:48 ID:???]
ageちまっていいスレだよな・・・

それか、
>>567-571はジエン厨じゃあなかろうなぁ?


574 名前:nobodyさん [03/11/09 19:55 ID:4SnYD/Cs]
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 |.本日選挙は20時迄!|
 |__________|
   ∧∧ ||
   ( ゚д゚)|| <残り10分切ったど!
   / づ     投票してない香具師は自衛隊の代わりにイラク逝けよ。

※総務省によると、総選挙の中間投票状況は
9日午後4時現在、全国平均で40.04%。前回を1.40ポイント下回っている。

575 名前:nobodyさん mailto:sage [03/11/09 19:59 ID:???]
>>573
あれが自演ならお前さんも>>569か?って事になるじゃん…。
本当だったら煽った挙句自演呼ばわりですかって感じで笑えるけど。


576 名前:nobodyさん mailto:sage [03/11/09 20:28 ID:???]
>>569
ハァ?
じゃあ「そのケース」とやらをここに貼れよ。
そのヘボ実装を検証してみようや。



577 名前:nobodyさん mailto:sage [03/11/09 20:54 ID:???]
>>572
馴れ合い?

578 名前:nobodyさん mailto:sage [03/11/09 21:14 ID:???]
>>577
「馴れ合い」の意味を知らないだけだろ。無知は構うな。ほっとけ。

579 名前:564 mailto:sage [03/11/10 14:47 ID:???]
あれ?flockが使える環境の人もこのスレの需要あったの?
まぁどっちでもこの場合変わらないけど。

580 名前:nobodyさん mailto:sage [03/11/10 14:53 ID:???]
>>561が勝手にflockと勘違いして
勝手に自分のやり方を押しつけたって事かぁ(・∀・)

581 名前:nobodyさん mailto:sage [03/11/10 16:11 ID:???]
>>580
ということにしたいのですね? :-)

582 名前:nobodyさん mailto:sage [03/11/10 16:19 ID:???]
もうほっとけほっとけ

583 名前:nobodyさん mailto:sage [03/11/10 16:43 ID:???]
♪か〜な〜しみ〜に〜であうた〜び〜

584 名前:nobodyさん mailto:sage [03/11/10 16:56 ID:???]
↓【Perl】flock() の使えない環境下でのファイルロック(排他処理)について語ろう

585 名前:nobodyさん mailto:sage [03/11/10 20:26 ID:???]
俺ん中の結論はRename形で、不雑なものになると管理が難しくなるんだよなぁ

586 名前:nobodyさん mailto:sage [03/11/10 20:34 ID:???]
>>585
何の管理?



587 名前:nobodyさん mailto:sage [03/11/10 20:37 ID:???]
同じディレクトリに複数のDATがある場合
ユニークなファイル名を生成するようにしないと。

…今思ったけど、たいした事無いなw

588 名前:蟻の子一匹通さないロック [03/11/14 04:40 ID:uv5dJ3X6]
10 GOTO アルカトラズ島;  # ロックへようこそ
20 処理;             
30 逆転無罪;          # 真犯人逮捕⇒釈放

589 名前:nobodyさん mailto:sage [03/11/14 05:44 ID:???]
>>580
>551からの流れでずっとflockの話だったわけだが。


590 名前:nobodyさん mailto:sage [03/11/14 16:05 ID:???]
どっちでも変わらん。
つーか変わってくるとしたらあれだ・・・


掲示板とかのスクリプトで
LOG→HTML随時吐き出し型
じゃなく
LOG=HTMLを表示する型
の場合、Rename型の排他処理は行えない可能性がある。

ということで。
結論から言えば退避ファイル名をhtml→htmとか適当に変えればいいんだろうけど。

591 名前:nobodyさん mailto:sage [03/11/14 17:52 ID:???]
このスレって二つの話題が流れてるんだが。

・flockが使えない環境ではどうしてる?
・ロックの有効性はその方法でなく、ロックを組み込む場所が大事。壊れる原因の大半は誤った使い方によるものなので、ありがちな落とし穴の再検証をしよう。

後者をよく理解してない初心者・中級者が、「flockで壊れた!flock使えねー」とわめいて、前者と後者をまぜこぜにして語って、スレが荒れるのが常。


592 名前:nobodyさん mailto:sage [03/11/14 18:00 ID:???]
それでわめいてるやつは中級とは言えないだろう

593 名前:nobodyさん mailto:sage [03/11/14 18:11 ID:???]
1 nobodyさん 02/06/23 10:18 ID:eY2l+Gw1
 どんな環境でも使えて、軽くて、頑丈なロックを考えようじゃありません

594 名前:nobodyさん mailto:sage [03/11/14 18:32 ID:???]
>>593
そいつは日本語が初心者なんだよw

595 名前:nobodyさん mailto:sage [03/11/14 18:38 ID:???]
たった今594が1を煽りました。

596 名前:nobodyさん mailto:sage [03/11/14 18:55 ID:???]
さあ、>>1よ щ(゚Д゚щ)カモーン!!



597 名前:nobodyさん mailto:sage [03/11/15 08:26 ID:???]
>>590はどうなの?

598 名前:nobodyさん mailto:sage [03/11/16 17:30 ID:???]
横レスすまんが、MySQLでも突っ込んでおけば、lockはぜんぶDBが
やってくれるやん・・・・・・・・ってのはだめなの?
あくまでOSにLockさせないとあかん?

599 名前:nobodyさん mailto:sage [03/11/16 17:34 ID:???]
はいはい、あっち行ってね

600 名前:nobodyさん mailto:sage [03/11/16 21:35 ID:???]
>>598
どうしてそうやって意地でも議論をループさせようとしますか?

601 名前:nobodyさん mailto:sage [03/11/17 02:04 ID:???]
あーごめん。実用の話じゃなくて、神学論争だったのね。
空気よめなかった。すまそ。

602 名前:nobodyさん mailto:sage [03/11/17 02:16 ID:???]
>>601
ていうか DB 使えるならその方がいいし、既に過去レスで全く同じやりとりが何度も出てるし。

603 名前:nobodyさん mailto:sage [03/11/18 14:37 ID:???]
>>601
釣れますか?

604 名前:nobodyさん mailto:sage [03/11/18 17:29 ID:???]
たとえば解析なしのアクセスカウンターにSQL使ってるのを俺は見た事ないな
俺が見た事ないだけかもしれないが

605 名前:nobodyさん mailto:sage [03/11/18 22:15 ID:???]
>>604 大規模サイトだと解析前提だからDBだな。そのほうが楽だし。
個人サイトならカウンタCGIを置くだけでしょ。壊れても問題ないし。

どしてもというなら、セマフォ管理するプロセスを立ち上げといて
それ使うって手もあるのかもしれんがそれならDB使うよ。
OSのファイルロックはアトミックじゃないっす。ソラリスでもそう。
マルチアクセス前提のファイルシステムもあるが、民生用じゃないな。

606 名前:nobodyさん mailto:sage [03/11/21 00:36 ID:???]
>>605
大規模サイトが、アクセスカウンターで解析するか?
ふつー、Webサーバのアクセスログを解析するだろ。

> OSのファイルロックはアトミックじゃないっす。ソラリスでもそう。
お前の使い方がヘボなだけ。



607 名前:nobodyさん mailto:sage [03/11/21 01:22 ID:???]
>>606 ログ解析だけで済めば世の中楽だよなー

608 名前:nobodyさん mailto:sage [03/11/21 01:56 ID:???]
607だけだとあおりみたいだから、いちおー。
確かに大規模サイトにはカウンタはないな。でもユーザーごとにレスポンスを
細かく制御すると、リアルタイムなユーザー管理いるからどうしてもDB。
ログ解析だけだとマーケティングデータしか出てこない。インタラクティブ
リアルタイムにそれ使わないと意味なしな。
静的なサイトでページビューだけでいいならログだけでいいけど、それじゃ
このスレの話題ずれる。
ちなみに俺はDB使わない程度のサイトならservletでロック処理。

609 名前:nobodyさん mailto:sage [03/11/21 02:13 ID:???]
>>608
スレタイを何度も声を出してよく読んでから発言した方が良いのでは?
どう考えてもあなたのレスはどれもこのスレにはお呼びでないと思うのですが?

610 名前:nobodyさん mailto:sage [03/11/21 02:23 ID:???]
>>609 あーすまん。607はあんまり口だすつもりなかったんだが
このスレには、人のことを「ヘボ」としか言わないやつがいて
それがどうもしゃくに障ったんでな。Perlの話しなくてスマソ。

611 名前:nobodyさん mailto:sage [03/11/22 00:21 ID:???]
>>608
Webアプリなら自前でログ持つ、バグ対応すること考えれば当たり前。

「ソラリス」なんて呼ぶ奴が「OSのファイルロックはアトミックじゃないっす」といった時は
使い方間違ってる確率99.9999%

612 名前:nobodyさん mailto:sage [03/11/23 05:00 ID:???]
「そらりす」って読んでた(;´Д`)アヒャ

613 名前:nobodyさん mailto:sage [03/11/23 05:24 ID:???]
>>612
いや、その読み方で合ってるし。

614 名前:nobodyさん mailto:sage [03/11/23 05:41 ID:???]
ところでDBMSで使ってるロック機構ってのは具体的にどんな処理なんでしょうか
単純に思いつくのはキューですが・・・
やっぱデーモンみたいな別プロセスに一括一元管理させるのが安全っちゃ安全ですよね?

615 名前:nobodyさん mailto:sage [03/12/04 07:40 ID:???]
ここは進行遅いですね。

結局、実用に耐えるファイルロックはどれなのか
スクリプト例でまとめて欲しい。おねがいエロイヒト。

616 名前:nobodyさん mailto:sage [03/12/04 11:19 ID:???]
>>10,>>12



617 名前:nobodyさん mailto:sage [03/12/13 19:02 ID:???]
昨日新しいファイルロック法思いついたんだけど寝て起きたら忘れてた

618 名前:nobodyさん mailto:sage [03/12/13 19:54 ID:???]
21世紀のファイルロックなんだろうな?

619 名前:nobodyさん mailto:sage [03/12/15 12:22 ID:???]
WinFS は SQLserver ベースになるそうだから
ファイルロックなんだかDBロックなんだかわからんような
あやしげなロックが提供されるんじゃないのか

620 名前:nobodyさん mailto:sage [03/12/15 19:16 ID:???]
Windowsはレジストリロックが使えます。
排他処理中はキーが書き込まれます。

621 名前:nobodyさん mailto:sage [03/12/19 21:19 ID:???]
今まで、flockが使えないと思ってたんだが、実は使えた!
ってこと無いですか?

622 名前:nobodyさん mailto:sage [03/12/19 23:28 ID:???]
ありませんね
あぁ、知識が足りなくて自分は使えないと?
やっぱりありませんね

623 名前:nobodyさん mailto:sage [03/12/20 02:36 ID:???]
$fp = fopen("test.txt", "a+");
if(!flock($fp, LOCK_EX)) { fclose($fp); echo "ns"; }
echo "ok";
これでいい?

624 名前:nobodyさん mailto:sage [03/12/20 02:38 ID:???]
windows環境で使えないと思ったけど普通に使えることに気が付いてびっくり。
つーかヘルプに書いてあった。

625 名前:nobodyさん [03/12/21 05:04 ID:FyNOPbG5]
きょうび、自作Perlスクリプトを置けるのに、flockが使えないISPなりレンタルサーバなんて、あるの?

626 名前:nobodyさん mailto:sage [03/12/21 16:43 ID:???]
yahoo



627 名前:nobodyさん mailto:sage [04/01/08 00:54 ID:???]
NiftyとかIswebとか使えるけど掛かるかどうかは保証しないとか言ってなかったっけ。
多分既出の話。

628 名前:nobodyさん mailto:sage [04/01/18 18:15 ID:???]
俺も需要がなくなってしまった。
ブックマークから外してしまおうかな。。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<262KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef