ホームページ > バックエンド開発 > C++ > スレッドの安全性を確保するために C# で Lock ステートメントはどのように機能しますか?

スレッドの安全性を確保するために C# で Lock ステートメントはどのように機能しますか?

Barbara Streisand
リリース: 2025-01-15 08:16:43
オリジナル
1019 人が閲覧しました

How Do Lock Statements Work in C# to Ensure Thread Safety?

C# Lock ステートメントのスレッド セーフティ メカニズムを深く理解する

マルチスレッド環境では、オブジェクトがスレッドセーフであることを確認することが重要です。このため、開発者はコードの重要な部分を保護するために lock ステートメントを使用することがよくあります。この記事では、lock ステートメントの内部の仕組みを詳しく掘り下げ、その動作と影響を明確にします。

Lock ステートメントの構造

内部では、lock ステートメントは System.Threading.Monitor クラスを使用して一連の命令に変換されます。 C# 3.0 は次のアプローチを採用しています:

<code class="language-csharp">var temp = obj;
Monitor.Enter(temp);
try
{
    // 线程不安全代码
}
finally
{
    Monitor.Exit(temp);
}</code>
ログイン後にコピー

ただし、C# 4.0 以降では、小さな変更が導入されました。

<code class="language-csharp">bool lockWasTaken = false;
var temp = obj;
try
{
    Monitor.Enter(temp, ref lockWasTaken);
    // 线程不安全代码
}
finally
{
    if (lockWasTaken)
    {
        Monitor.Exit(temp); 
    }
}</code>
ログイン後にコピー

監視とブロック

Monitor.Enter メソッドは lock ステートメントの中核です。指定されたオブジェクトのモニターを取得しようとします。別のスレッドが以前に同じオブジェクトに対して Enter 操作を実行していて、対応する Exit 操作をまだ実行していない場合、現在のスレッドは、他のスレッドがロックを解放するまでブロックされます。

無期限に待機します

Monitor.Enter メソッドはロックが使用可能になるまで無期限に待機することに注意することが重要です。他のロック機構とは異なり、タイムアウトの概念がありません。

パフォーマンスノート

ロックを使用すると、アプリケーションのパフォーマンスに影響を与える可能性があります。ロックは、他のスレッドが同じリソースにアクセスできないようにすることで競合を引き起こします。これにより、スループットが低下し、遅延が増加する可能性があります。したがって、ロックは慎重に使用し、スレッドアンセーフなコードを保護するために必要な場合にのみ使用することが重要です。

以上がスレッドの安全性を確保するために C# で Lock ステートメントはどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート