0

cron をインストールしたので、毎分同じスクリプトを実行します。同時に、スクリプトが数回実行されます。

次のような部分があります。

$query = mysql_query("select distinct `task_id` from tasks_pending where `checked`='0' and `taken`='0' limit 50");

次に、取得した値を「taken = 1」に設定します

複数のプロセスが同時に実行されるため、リクエストは異なるプロセスに対して同じデータを返します。彼女の時間のこの部分を何らかの方法で無効にして、1 つのプロセスのみを実行できるようにすることは可能ですか?

下手な英語でごめんなさい。

4

2 に答える 2

2

SELECT FOR UPDATEを使用すると、同じ行が更新される前に別のプロセスがブロックされて同じ行が選択されます。

于 2012-06-29T10:46:28.523 に答える
1

何かを行う前にテーブルをロックし、後で[UN]LOCK TABLESステートメントを使用してロックを解除したい場合があります。

それ以外の場合はSELECT FOR UPDATE、トランザクション スコープ内でクエリを使用できます。

于 2012-06-29T10:48:50.157 に答える