同時実行性とデータの整合性を確保するために、特定のオブジェクトの相互排他ロックをどのように取得しますか? データベースまたはファイル内でロックを使用する必要がありますか、または PHP はこのようなものをサポートしていますか?
6 に答える
PHPはマルチスレッドをサポートしていないため、オブジェクトのロックメカニズムはありません。ファイルをロックしたい場合は、そのためにflockを使用できます。データベースエンジンは通常複数の接続を処理できるため、データベースをロックする必要はありません。
PHPはマルチスレッドではないため、このようなものが必要になる可能性はほとんどありません...ただし、共有メモリやその他の外部リソースを使用する場合は必要になることがあります。このような場合は、スマフォを使用してください。
http://www.php.net/manual/en/function.sem-acquire.php
ファイルの群れ。
データベースでロックを使用する場合は、それらのデータベースのロック機能を使用する必要があります。ほとんどすべてのデータベースは、何らかの形式のロックメカニズムを使用しています。
オブジェクトには何もありません
セマフォをサポートしています
それは群れを持ってい ますhttp://www.php.net/manual/en/function.flock.php
MySQLでテーブルロックを行うことができます。
PHP はマルチスレッド環境で実行できます。また、Web サーバーが複数のスレッドを使用していない場合でも、複数のプロセスを同時に実行できます。
この場合、並行性の問題は引き続き発生する可能性があります。
並行性の問題を解決するためにロックに似たものが必要な場合は、セマフォを使用できます: http://www.php.net/manual/en/function.sem-acquire.php
他の人が答えたように、PHP はマルチスレッド化されていないため、オブジェクトをロックする必要はありません。ただし、データベースをロックする必要がある場合は、トランザクションを参照することをお勧めします。PHP と MySQL でトランザクションを実行するためのチュートリアルが多数あります (おそらく他の RMDBS も同様です)。