• 締切済み

一秒間以内のランダムなミリ秒

ファイル書き込みで同時書き込み防止として遅延させて書き込み処理を行いたいのですが、 ・usleep(1000000);で 一秒以下のランダムなミリ秒 6桁を $timelate = "??????";としたいです。 flock関数が使えないサーバーを利用しており、簡易的ではあると思いますが、この方法で行うにはどうのようにすれば良いでしょうか?

みんなの回答

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.3

時間差は何の効果もないでしょう。 時間を複数スレッドで同期出来ないのですから。 それに複数ブロックの書込み途中で割り込まれたら防ぎようがありません。 既に答えられている以外の方法として、ファイルをデータベース化する方法が あると思います。 データベースが排他処理をしてくれるでしょう。

すると、全ての回答が全文表示されます。
noname#244856
noname#244856
回答No.2

セマフォを使う方法はどうでしょうか? Wikipedia - セマフォ http://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%9E%E3%83%95%E3%82%A9 Windows版以外のPHPには実装されているようです。 【サンプル】 <?php $sem = sem_get(ftok(__FILE__, 'c')); sem_acquire($sem); /* クリティカルセクション */ sem_release($sem);

すると、全ての回答が全文表示されます。
回答No.1

こんにちわ。 この方法は、あまりおすすめできません。 (結局ランダムなミリ秒が、衝突する可能性があります) リネームロックをさせることをお勧めします。 http://webcache.googleusercontent.com/search?q=cache:Q8fjng_dYqQJ:wawatete.ddo.jp/exec/program/php/php_filelock+&cd=3&hl=ja&ct=clnk&gl=jp&client=firefox-a 以下は、perlコードです http://www.din.or.jp/~ohzaki/perl.htm#File_Lock

すると、全ての回答が全文表示されます。

関連するQ&A