- 718 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 21:39:16.03 ID:vIdecit0.net]
- >>712
マニュアルに書いてあることにケチつける気は全く無いんだけど、 Linux の 5.3.3 と Windows7 の 5.6.22 で実験しても、LOCK_UN が必要だと思われる挙動が認められない。 fclose だけでロックは外れるし、同プロセス内で同じハンドルに対してアンロックも fclose もしないまま 2重にロックを掛けてもデッドロックしない。 どういうケースで LOCK_UN の明示が必要なんだろう? 実験コードはこれ。 $lock = fopen('lock','a'); echo "start\n"; if(!flock($lock, LOCK_EX)) { echo "fail 1\n"; exit(1); } echo "locked 1\n"; // ロック成功 if(!flock($lock, LOCK_EX)) { echo "fail 2\n"; exit(1); } echo "locked 2\n"; // 二重ロックでもデッドロックしていない fgets(STDIN); // ENTER が押されるまで待つ fclose($lock); // アンロックせずクローズ print "unlocked\n"; sleep(5); // プロセスの終了を引き延ばす(ロック残り状態があるならそれを維持する) print "end\n";
|

|