- 【PHP】下らねぇ質問はここに書き込みやがれ 5 [無断転載禁止]©2ch.net
709 :デフォルトの名無しさん[sage]:2016/06/11(土) 16:11:06.58 ID:ZgIjL8Zc - 最初flock絡みでデッドロックやらかした時は
スクリプト止まらないしエラー吐かないしで何が悪いのか全然わからなくて立ち往生状態だった >>698 serializeほど楽じゃないが別途db用デーモンを起動させとかなくていいsqliteは便利 そういや手軽なdbの話じゃ最近berkeley dbの名前を全然見ないな…なんでだ
|
- 【PHP】下らねぇ質問はここに書き込みやがれ 5 [無断転載禁止]©2ch.net
712 :デフォルトの名無しさん[sage]:2016/06/11(土) 16:24:29.25 ID:ZgIjL8Zc - >>691
いや違う、falseを返すとかじゃなくてデッドロックを引き起こす 延々とロック取得待ち状態になってkillしなきゃいけなくなる
|
- 【PHP】下らねぇ質問はここに書き込みやがれ 5 [無断転載禁止]©2ch.net
716 :デフォルトの名無しさん[sage]:2016/06/11(土) 22:15:24.50 ID:ZgIjL8Zc - >>715
すまんが712は単純に「LOCK_EXされたファイルへのLOCK_EX」の挙動を書いただけ flockの仕様から同一プロセスからの多重flockは後に指定したLOCK_**に上書きされるだけ、なのも確実(winは知らん) で、記憶掘り返しながらこっちでも試してみたけど>>715の言うとおり 同一プロセス内でも、別プロセスでも、fopen->flock->fclose->fopen->flock でデッドロックしなかった flock($fh, LOCK_EX)絡みでデッドロックになってハマった記憶が確かにあるんだがなあ…しかも1プロセスで 昔書いたソースとメモを読んでるけど該当箇所が見つからん
|
- 【PHP】下らねぇ質問はここに書き込みやがれ 5 [無断転載禁止]©2ch.net
722 :デフォルトの名無しさん[sage]:2016/06/11(土) 23:36:10.98 ID:ZgIjL8Zc - >>718
そんな感じがしてきた。(だが718のコードだと$lockを上書きしちゃってるからデッドロックは起きない) 同一のファイルを二重に開いて別々にファイルハンドルを保持し別々にflockしたとき 片方だけでもfcloseしたら両方LOCK_UNされることの対策か、とも思ったけど 実際に下記を手元のwin-5.2.0とlinux-5.1.6とlinux-5.6.8で試してみたら、どうも違うようだ $file = './flock.lock'; $fh1 = fopen($file, 'a'); flock($fh1, LOCK_SH); $fh2 = fopen($file, 'a'); flock($fh2, LOCK_SH); fclose($fh1); $fh3 = fopen($file, 'a'); flock($fh3, LOCK_EX); // いずれもここでデッドロックが発生 わからん
|
- 【PHP】下らねぇ質問はここに書き込みやがれ 5 [無断転載禁止]©2ch.net
725 :デフォルトの名無しさん[sage]:2016/06/11(土) 23:57:31.23 ID:ZgIjL8Zc - >>724
気にすんな しかしこうなると真面目に手動LOCK_UNの意味・有効な場面がわからなくなってくるな というかfclose/flock仕様変更の前後の差異がわからん
|