PHPファイルの読み書きロック問題の詳細説明

高洛峰
リリース: 2016-10-17 10:54:07
オリジナル
1228 人が閲覧しました

読み取りと書き込みに関連する問題は常に存在します。実際、ファイル ロックはこの問題を解決するように設計されています。読み取りと書き込みの依存関係とは、ファイルの読み取りと書き込みを同時に行うことによって引き起こされるファイル データのランダムな競合を指します。ファイル内のデータの変更または読み取りにいつ、どのような操作が使用されたかを明確に知るには、ユーザーがファイル内にいつどのデータが存在するかを正確に把握できるように、操作をシリアル化し、アトミック化し、同期する必要があります。ファイル ロックはこれらのツールの 1 つです。

ファイル システムには通常、共有ロックと排他ロックという 2 種類のロックがあり、読み取りロックや書き込みロックとも呼ばれます。

ファイル システム ロックの特徴:

ファイルを開くときに、ファイルは 1 つのロックのみを持つことができます。つまり、1 つのファイルに同時に 2 つまでのロックを割り当てることができます。

ロックされたファイルを読み書きするユーザーは、このロックを保持できます。つまり、このロックを保持しているユーザーは、ファイルに対して読み取りや書き込みなどの対応する操作を実行できます。ユーザーはファイル ロックの保持を申請できます。ファイルが最初にロック解除されている場合、システムはロックの保持を申請する前にファイルのロックを作成し、申請者はそれを保持します。

ロック保持のルール: このファイルがすでに読み取り (共有) ロックを持っている場合、他のユーザーはそのファイルに排他的ロックや読み取り専用ロックを割り当てることはできませんが、ロックを保持することはできます。つまり、他のユーザーはファイルを読み取ることができますが、ファイルがロックされている限り、ユーザーはファイルに書き込むことができません。ファイルにすでに排他ロックが設定されており、ユーザーがそのファイルを保持している場合、所有者がロックを解除しない限り、ユーザーは再びロックを保持することはできません。

覚えておくべき重要な概念があります。ファイル自体の操作はロックとは関係ありません。ファイルがロックされているかどうかに関係なく、ユーザーはファイルに対して通常の操作を自由に実行できます。システムはロックをチェックし、状況に応じて異なる処理を行います。たとえば、ロックのない状況では、誰もが任意のファイルを同時に読み書きできます。もちろん、読み書きされる内容が間違っている可能性が非常に高くなります。間違っているのは内容と操作だけであることに注意してください。間違いではないでしょう。ロック後は、特定の状況下で特定の操作が拒否されます。ファイル ロックの機能は、ファイルとデータ自体を保護することではなく、データの同期を確保することです。したがって、ファイル ロックは、ロックを保持しているユーザーに対してのみ、またすべてのユーザーが同じロックを使用している場合にのみ有効です。ファイルのロックは、ファイルにロック制限が適用されている場合にのみ、すべてのユーザーに対して有効になります。そうでない場合は、例外がある限り、ファイル ロック機能全体が破棄されます。たとえば、ファイルを開く、ロックする、読み書きする、ロックを解除する、ファイルを閉じるという手順を全員が実行した場合、全員の操作に問題はありません。これは、ファイル ロックの割り当てと保持の原則に基づいて、ファイル内のデータが保持されるためです。ファイルの更新はアトミックな操作として存在し、分割不可能であるため、同期的で安全です。しかし、このステップを踏まないと、正確に読めない、または書けないなど、読み書きの際に問題が発生します。

上記の原則に基づいて、読み取りデータがロックされているかどうかについて議論する価値があります。一般的に、排他ロックは、ファイルに書き込まれるデータが正しいことを保証するための唯一の操作であり、ファイルがロックされている場合、他のユーザーはロックを取得できないため、いかなる操作も実行できません。読み取りの場合、特定の状況によって異なりますが、特に正確なデータや機密データが必要ない場合は、ロックする必要はありません。ロックには時間とリソースがかかります。一人で適用するのに時間はかかりません。さらに問題があるのは、ファイルを更新する必要がある場合に、ファイルが読み取り専用ロックでロックされている場合、書き込みを希望するユーザーが書き込みを行うことができないことです。同時に排他ロックを取得します。読み取り専用ロックの保持を申請する人が多すぎると、排他ロックが適用されない可能性があります。これは、ファイルが長時間書き込まれない可能性があることを意味します。とても遅くなる。一般に、ファイルを書き込む機会は比較的まれであり、より重要であるため、ほとんどの場合、排他的ロックは必要ありません。では、読み取り専用ロックはどこで使用されるのでしょうか?読み取り専用ロックは、実際にはユーザー自体にのみ役立ちます。ユーザーが読み取るデータが、「ダーティ」と呼ばれるダーティなデータではなく、ファイルから読み取られた実際のデータであることが保証されます。実際、これは、ロックを使用しない他のユーザーによるファイルの誤操作を目的としています。ファイルがロックされている場合、他のユーザーは、ファイルを直接読み書きするために必ずしもロックを使用する必要はありません。ロックされたファイルにはアクセスできなくなり、操作が無効になる可能性があります。読み取りロックを保持しているユーザーは、データを読み取るときに、上書きされたデータではなく実際のファイルから読み取ることができます。同時に。

そのため、この時にデータがおかしくならないように、書き込み時には排他ロックをかけるのが当然のはずです。共有ロックを適用しない場合、読み取られたデータは正しくない可能性がありますが、ファイル自体には影響しません。影響を受けるのはユーザーのみです。共有ロックの適用後に読み取られるデータは本物である必要があります。データの正確性を保証する必要がない場合は、書き込みのために再度読み取られるだけです。排他ロックを直接追加することをお勧めします。共有ロックを使用する必要はありません。

もう 1 つ強調すべき点は、ファイル ロックは、それを使用するユーザーとルールに従って使用するユーザーにのみ有効であるということです。それ以外の場合、あなたはあなたのものを使用し、私はそれを使用する人もいれば、使用しない人もいます。同じファイルに対して、ファイル ロックを使用するために全員が同じルールを使用する場合にのみ、ファイルの共有時に各ユーザーが読み取りまたは書き込みエラーを起こさないようにすることができます。


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!