スレッド間のヒープ競合の回避スレッドは、サポートされているスレッドモデルの実装で提供される同期プリミティブを実行して、共有リソースで同期します。つのスレッドだけがロックを保持できるようにし、その間ほかのスレッドはタイムアウト・メカニズムに応じてスピンまたはブロックされるようにします。非ブロッキング・システムコールは、競合スレッドがロックに失敗した場合、リターンして有益な処理を行えるようにし、実行リソースの浪費を回避します。プラットフォーム向けにマルチスレッド・アプリケーションを効率的に開発するための手法について説明します。含むほとんどのスレッド化の実装では、ブロッキングと非ブロッキングの両方のスレッド同期プリミティブが提供されています。通常、デフォルトでは、ブロッキング・プリミティブが使用されます。ブロッキング・プリミティブでは、ロックに成功すると、スレッドはロックの制御を取得し、クリティカル・セクションでコードを実行します。ロックに失敗した場合は、コンテキスト・スイッチが発生し、スレッドは待機中のスレッドのキューに入れられます。コンテキスト・スイッチには、次のようなコストがかかるため、できるだけ避ける必要があります。コンテキスト・スイッチには大きなオーバーヘッドが伴い、特にカーネルスレッドを使用したスレッドの実装ではこれが顕著です。アプリケーションで同期コールの後にある処理は、スレッドがロックを取得するまで実行を待機しなければなりません。非ブロッキング・システムコールを使用することで、これらのパフォーマンス・ペナルティーを軽減できます。非ブロッキング・システムコールでは、クリティカル・セクションのロックに失敗しても、アプリケーション・スレッドは実行を再開します。そのため、コンテキスト・スイッチに伴うオーバーヘッドとロックでの不必要なスピンが排除され、スレッドは再度ロックの取得を試みるまで、有益な処理を行うことができます。アドバイスコンテキスト・スイッチに伴うオーバーヘッドを回避するために、できるだけ非ブロッキングの呼び出しを使用してください。クリティカル・セクションの同期プリミティブとして、以下のようにブロッキングと非ブロッキングの両方が提供されています。返され、スレッドはアプリケーション・コードの実行を再開します。cs);次に、非ブロッキング・システムコールの一般的な使用例を示します。mutex、セマフォー、条件変数の非ブロッキング同期プリミティブが提供されています。同期プリミティブには、以下のようにブロッキングと非ブロッキングの両方があります。スレッドの実装では、ロッキング・プリミティブでタイムアウトを指定することもできます。システムコールが提供されています。これらのシステムコールを実行するスレッドは、該当するカーネル・オブジェクトがシグナル状態になるか、ユーザーによって指定された待機時間が経過するまで待機します。待機時間が経過すると、スレッドは処理の実行を再開します。待機時間が経過しても、カーネル・オブジェクトがシグナル状態にならなかった場合、この関数は戻ります。設定すると、スレッドは無制限に待機します。コールの使用例を示したものです。コールでも、複数のカーネル・オブジェクトのシグナル状態を待機することができます。使用する場合は、共有オブジェクトを解放する前に、戻り値をチェックして要求が成功したかどうかを確認する必要があります。システムヒープからのメモリーの割り当ては、単純な処理ではありません。これは、システム・ランタイム・ライブラリーが、ヒープへのアクセス同期にロックを使用するためです。アプリケーションをマルチスレッド化してパフォーマンスを向上させるのは骨の折れる作業です。Applications」の日本語参考訳です。サイトはエクセルソフト株式会社が運営しています。社名、製品名などは一般に各社の表示、商標または登録商標です。