php 同期ソリューション
MySQL のドキュメントによると、PHP の同期実行は非常に面倒です。
======================================== ===== ======================
GET_LOCK(str,timeout)
指定された名前の string でロックを取得しようとしますstr、タイムアウトあり 秒。ロックが正常に取得された場合は 1、操作がタイムアウトした場合 (たとえば、別のクライアントが事前に名前をブロックしたため) は 0、エラーが発生した場合 (メモリ不足またはスレッド mysqladmin kill が切断された場合など) は NULL を返します。 。 GET_LOCK()でロックを取得している場合は、RELEASE_LOCK()を実行するか、接続が切断される(正常または異常)ときにロックが解除されます。
この関数は、アプリケーションのロックを実行したり、レコードのロックをシミュレートしたりするために使用できます。名前はサーバー全体でロックされます。名前がクライアントによってすでにブロックされている場合、GET_LOCK() は別のクライアントからの同じ名前をブロックするリクエストをブロックします。これにより、ロック名に同意したクライアントは、その名前を使用して勧告ロックを実行する際に協力できるようになります。ただし、連携クライアントのグループに属していないクライアントも、サービス中または意図せずに名前をブロックできるため、連携クライアントが名前をブロックできないことに注意してください。この状況の発生を減らす 1 つの方法は、データベース固有またはアプリケーション固有のブロック名を使用することです。たとえば、db_name.str または app_name.str の形式のブロック名を使用します。
======================================== ===== ======================
ユーザーがファイルに同時にアクセスしたくない場合は、連続してアクセスされる
ファイル a.php が 2 つのリクエストによって同時にアクセスされることを望まない場合は、次のようにすることができます。
$db = getdb(); // データベースを取得します。繋がり。
$db->query('do get_locak');