この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 30344|答える: 2

[出典] ロック付きC#スレッドセーフティ

[リンクをコピー]
掲載地 2016/06/13 17:26:25 | | |

もしあなたのコードが複数のスレッドが同時に動いているプロセスに入っているなら、同時にコードを実行している可能性があります。 各実行の結果が単一のスレッドの結果と同じで、他の変数の値も予想通りであれば、スレッド安全です。
言い換えれば、クラスやプログラムが提供するインターフェースはスレッドに対して原子的であり、複数のスレッド間の切り替えがインターフェースの実行結果に曖昧さを生まないため、同期を考慮する必要はないということです。
スレッド安全の問題は、グローバル変数と静的変数の両方によって引き起こされます。
各スレッドがグローバル変数と静的変数の読み取り操作のみを持ち、書き込み操作がない場合、一般的にこのグローバル変数はスレッドセーフです。 複数のスレッドが同時に変数の読み書き操作を行う場合、スレッド同期が一般的に必要であり、そうでなければスレッドのセキュリティに影響を及ぼす可能性があります。

ロックの目的は、マルチスレッド実行時の並行操作を防ぐことであり、参照タイプのロックのオブジェクトはロック領域内で一度に1つのスレッドのみを動作させることを許可します。

ロックは参照型変数、すなわちアドレスをロックできるのは1つだけです




ロック付きとなしの実行結果には違いがあります。

ロック後:iの値は一つずつ減少し、ジャンプや繰り返し出力はなく、0の値になるまで続きます。

ロックなし:iの値出力は跳ね上がり、不連続に減少し、-1の値出力を持つこともあります。

理由:ロックを追加した後は、ロックされた領域でコードを同時に実行できるスレッドは1つだけで、両方のスレッドが順番に実行されるため、割り込み出力がありません。




先の:ユーザーがセーブダイアログからキャンセルされました(MS Visual Database Tools)
次に:ストアドプロシージャを実行する便利なDBHelperクラス
掲載地 2016/06/14 10:53:36 |
 地主| 掲載地 2022/02/10 9:18:58 |
.NET/C# ロック原理モニターは詳細な説明を提供します
https://www.itsvse.com/thread-9633-1-1.html
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com