揮発性のメモ2

http://d.hatena.ne.jp/iww/

flock()

排他制御をするとき、ブロックしない(LOCK_NB)を指定すると flock()そのものは必ず成功する(trueが返る)。
ブロックされてたか否かは 3番目の引数($wouldblock) を見て判定する。
$wouldblockfalseならロックをゲットできた、trueならロックできなかった(他の誰かがすでにゲットしてた)。


ロック時にブロックするように指定した(LOCK_NBをつけなかった)ときは、ブロックが解除された時点で $wouldblockfalse(ロックできた)で返る。

#!/usr/bin/php
<?
    $fp = fopen("/tmp/hoge","w+") or die("fopen error");
    flock($fp,LOCK_EX|LOCK_NB,$wouldblock ) or die("flock error");
    if($wouldblock){
        print("already lock\n");
        exit();
    }else{
        print("get lock\n");
    }

    // 処理を書く
    sleep(30);
?>

「ロックできなかったらflock()がfalseで返る」などという説明は誤り。多分。


PHP: flock - Manual