- 43 名前:デフォルトの名無しさん mailto:sage [2016/05/13(金) 11:46:37.11 ID:/XgzJMPY.net]
- >>41
いろいろ面白そうだったので、勝手に作ってみた。 function my_lock($lockfile, $timeout, $maxuser) { // ロック試行 $fp = fopen($lockfile, 'a'); if(flock($fp, LOCK_EX|LOCK_NB)) return $fp; // 待ち人数を数える exec('/usr/sbin/lsof -FC '.escapeshellcmd("\"$lockfile\"").' 2>/dev/null', $out, $ret); if($ret == 0) { if(count($out) > $maxuser) { // 待ち人数過剰 fclose($fp); return false; } } // 時間制限付きロック試行 for($interval = 100, $remain = $timeout * 1000; $remain > 0; $remain-=$interval) { if(flock($fp, LOCK_EX|LOCK_NB)) return $fp; usleep($interval * 1000); } // タイムアウト fclose($fp); return false; }
|

|