同じ関数が同時に実行されないように、PHP の関数を同期させる方法は? 2 番目のユーザーは、1 番目のユーザーが機能を完了するまで待つ必要があります。その後、2 番目のユーザーが機能を実行できます。
ありがとう
同じ関数が同時に実行されないように、PHP の関数を同期させる方法は? 2 番目のユーザーは、1 番目のユーザーが機能を完了するまで待つ必要があります。その後、2 番目のユーザーが機能を実行できます。
ありがとう
これは基本的に、関数がロックされ、最初の呼び出し元がその関数から戻るまで実行できないというフラグをどこかに設定することになります。これは、いくつかの方法で行うことができます。
並行アプリケーションをコーディングするときは、常に競合状態とデッドロックに注意してください!
セマフォを使用したUPDATE (未テスト):
<?php
define('SEM_KEY', 1000);
function noconcurrency() {
$semRes = sem_get(SEM_KEY, 1, 0666, 0); // get the resource for the semaphore
if(sem_acquire($semRes)) { // try to acquire the semaphore. this function will block until the sem will be available
// do the work
sem_release($semRes); // release the semaphore so other process can use it
}
}
sem_* 関数を使用するには、sysvsem をサポートするように PHP をコンパイルする必要があります。
PHP でセマフォを使用するためのより詳細なチュートリアルを次に示します。
セマフォを探しています
セマフォ (またはその他のブロッキング メカニズム) を使用すると、セマフォが起動している間は要求を処理できないため、重大なパフォーマンスの問題が発生する可能性があることに注意してください。
私の頭の上から:
しかし、どういうわけか、あなたがやろうとしていることは「間違っている」ので、別の方法で達成できると思います。詳細を教えていただければ助かります
編集:phpセマフォを認識していませんでした。上記の回答の方がはるかに高速です。