16/06/11 21:39:16.03 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";