static function lockr($fp) { set_file_buffer($fp, 0); if (!flock($fp, LOCK_SH)) { HakoError::lockFail(); } rewind($fp); }
static function lock() { global $init; $fp = fopen("{$init->dirName}/lock.dat", "w"); for ($count = 0; $count < LOCK_RETRY_COUNT; $count++) { if (flock($fp, LOCK_EX)) { // ロック成功 return $fp; } // 一定時間sleepし、ロックが解除されるのを待つ // 乱数時間sleepすることで、ロックが何度も衝突しないようにする usleep((LOCK_RETRY_INTERVAL - mt_rand(0, 300)) * 1000); } // ロック失敗 fclose($fp); HakoError::lockFail(); return FALSE; }