デッドロック
デッドロックとは、オペレーティング システムまたはソフトウェアが実行されている状態です。マルチタスク状態で、1 つ以上のプロセスが待機しているときです。システム リソースがシステム自体または他のプロセスによって占有されている場合、デッドロックが形成されます。発生するデッドロックの最も一般的な形式は、2 つ以上のスレッドが別のスレッドによって占有されるリソースを待機する場合です。
両方のシーケンスが同時に発生すると、スレッド 1 は決して実行できなくなります。ロック B はスレッド 2 によって所有されているため、ロック B が取得されます。同時に、ロック A はスレッド 1 によって所有されているため、スレッド 2 はロック A を取得できません。
デッドロックの発生条件
デッドロックが発生するには、次の4つの条件を満たす必要があります。
①相互排他的条件: は、プロセスによる割り当てられたリソースの排他的使用を指します。つまり、リソースは一定期間内に 1 つのプロセスによってのみ占有されます。この時点でリソースを要求している他のプロセスがある場合、要求者はリソースを占有しているプロセスが使い果たされて解放されるまで待つことしかできません。
②要求と保持の条件: は、プロセスが少なくとも 1 つのリソースを保持しているが、新しいリソース要求を行っており、そのリソースが他のプロセスによって占有されていることを意味します。要求元のプロセスはブロックされていますが、彼は取得したリソースをまだ保持しています。
③ 非剥奪条件: はプロセスが取得したリソースを指し、使用終了前に剥奪することはできず、使用終了後にのみ解放できます。
④ループ待機条件: は、デッドロックが発生したときに、プロセス (つまり、プロセス セット {P0, P1,...) 内にリソースの循環チェーンが存在する必要があることを意味します。 ,Pn} P0 は P1 によって占有されるリソースを待機し、P1 は P2 によって占有されるリソースを待機します。...、Pn は P0 によって占有されるリソースを待機します。
デッドロックの回避方法と対処方法
デッドロックの回避:デッドロックを回避する方法は、4 つの条件のうち 2 番目と 3 番目を満たしていることです。 、デッドロックを回避するために 4 つの条件のうち 1 つが成立することはできません。
① ロック順序: 同じ順序でロックします。
複数のプロセスが同じロックを必要とし、異なる順序でロックを追加すると、デッドロックが発生しやすくなります。すべてのプロセスが同じ順序でロックを取得することが保証できれば、デッドロックは発生しません。
②ロック時間制限: プロセスがロックを取得しようとするときに、特定の時間制限を追加します。
つまり、ロックの申請時に制限時間を超過すると、プロセスはロックの要求を放棄し、取得したすべてのロックを解放します。その後、ランダムな時間が経ってからもう一度試してください。このランダムな時間により、他のスレッドに同じロックの取得を試行する機会が与えられ、アプリケーションはロックを取得せずに続行できるようになります。問題は、同じバッチのリソースを同時に競合するプロセスが多数ある場合、タイムアウトとロールバックのメカニズムがある場合でも、一部のプロセスが繰り返し試行してもロックを取得できないという問題が依然として発生する可能性があることです。
デッドロックの回避: この方法も事前の予防戦略ですが、デッドロックの 4 つの必要条件を破壊するために事前にさまざまな制限措置を講じる必要はありません。リソースの動的割り当て中にシステムが安全でない状態に陥るのを防ぎ、デッドロックを回避する方法です。
デッドロック検出: これは主に、順次ロックが達成できず、ロック時間制限が実現できない状況を目的としています。
設定された検出メカニズムにより、デッドロックの発生をタイムリーに検出し、デッドロックに関連するプロセスとリソースを正確に特定します。その後、システムで発生したデッドロックを解消するための適切な措置を講じてください。
プロセスがロックを取得すると、そのロックはプロセスとロックに関連するデータ構造に記録されます。そして、プロセスがロックを要求するたびに、それがこのデータ構造に記録されます。プロセスがロックの要求に失敗した場合、スレッドはプロセスを走査してデータ構造をロックし、デッドロックが発生したかどうかを判断できます。
例:
プロセス A はロック 2 を要求しますが、ロックはプロセス B によって 2 回占有されているため、プロセス A はプロセス B を待ちます。同様に、プロセスBはプロセスCを待ち、プロセスCはプロセスDを待ち、プロセスDはプロセスAを待ちます。プロセス A がデッドロックを検出するには、B によって要求されたすべてのロックを段階的に検出する必要があります。プロセス B が要求した場所から開始して、プロセス A はプロセス C を見つけ、次にプロセス D を見つけます。プロセス D が要求したロックがプロセス A 自身によって占有されていることがわかり、デッドロックが検出されます。
プロセス A がデッドロックを検出した場合、実行可能な方法は、プロセス A が保持しているロックを解放し、ロールバックし、ランダムな時間が経過した後に再試行することです。これは、デッドロックがすでに発生していることを除けば、ロック時間制限と似ています。
デッドロック救済: デッドロックの検出に合わせた措置です。
プロセスがデッドロックしていることが判明した場合、そのプロセスは直ちにデッドロック状態から解放される必要があります。1 つの方法は、リソースを奪うことです。デッドロック状態を緩和するために、デッドロックプロセスに対して他のプロセスから十分な量のリソースを奪います。 もう 1 つの方法は、プロセスをキャンセルすることです。プロセスをキャンセルする最も簡単な方法は、デッドロックしたプロセスをすべて強制終了することです。もう少し穏やかな方法は、使用可能なリソースが十分にある場合に、何らかの順序でプロセスを 1 つずつキャンセルすることです。 推奨チュートリアル: PHP ビデオ チュートリアル
以上がPHP開発におけるファイルのデッドロックを回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、酸とベースのデータベースモデルを比較し、その特性と適切なユースケースを詳述しています。酸は、財務およびeコマースアプリケーションに適したデータの整合性と一貫性を優先し、ベースは可用性に焦点を当て、

この記事では、コードインジェクションのような脆弱性を防ぐために、PHPファイルのアップロードを確保することについて説明します。ファイルタイプの検証、セキュアストレージ、およびアプリケーションセキュリティを強化するエラー処理に焦点を当てています。

記事では、組み込み関数、ホワイトリストアプローチ、サーバー側の検証などの手法に焦点を当てたセキュリティを強化するためのPHP入力検証のベストプラクティスについて説明します。

この記事では、Token BucketやLeaky BucketなどのアルゴリズムやSymfony/Rate-Limiterなどのライブラリを使用するなど、PHPでAPIレート制限を実装するための戦略について説明します。また、監視、動的に調整されたレートの制限、および手をカバーします

この記事では、パスワードを保護するためにPHPでpassword_hashとpassword_verifyを使用することの利点について説明します。主な議論は、これらの関数が自動塩の生成、強力なハッシュアルゴリズム、およびSecurを通じてパスワード保護を強化するということです

この記事では、PHPおよび緩和戦略におけるOWASPトップ10の脆弱性について説明します。重要な問題には、PHPアプリケーションを監視および保護するための推奨ツールを備えたインジェクション、認証の壊れ、XSSが含まれます。

この記事では、PHPでのXSS攻撃を防ぐための戦略について説明し、入力の消毒、出力エンコード、セキュリティを向上させるライブラリとフレームワークの使用に焦点を当てています。

この記事では、PHPでのインターフェイスと抽象クラスの使用について説明し、それぞれをいつ使用するかに焦点を当てています。インターフェイスは、無関係なクラスや複数の継承に適した、実装なしで契約を定義します。抽象クラスは共通の機能を提供します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

WebStorm Mac版
便利なJavaScript開発ツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター
