この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。
建築家
建築家
リスト
放送
茶屋
インテリジェントAI会話
.NETキャリア&テクニカルカレッジ
ちっちゃいなクズブログ
この版
利用者
Architect_Programmer_Code農業ネットワーク
»
建築家
›
プログラミング
›
.Net/C#
›
lock なぜ参照だけをロックできて、値型はロックできないのか
眺める:
18907
|
答える:
0
[出典]
lock なぜ参照だけをロックできて、値型はロックできないのか
[リンクをコピー]
クズども
掲載地 2016/12/08 10:43:37
|
|
|
値型を渡すとボックス化され、次にここでコードが実行されたときに再びボックス化され、同じオブジェクトが2回も使われないためロックされません
lock(x)
{
...
}
ロックは実際にはMonitorオブジェクトを通じて行われます:
上記は以下と同等です:
System.Object obj = (System.Object)x;
System.Threading.Monitor.Enter(obj);
やってみて
{
...
}
最終的に
{
System.Threading.Monitor.Exit(obj);
}
次にMSDNの原文を引用すると:
Monitorは値型ではなく、オブジェクト(参照型)をロックします。 avalue type variableをEnterに渡すと、それはオブジェクトとしてボックス化されます。 同じ変数を再度Enterに渡すと、それは別のオブジェクトとしてボックス化され、thethreadはブロックされません。 この場合、モニターが保護しているはずのコードは保護されていません。 さらに、変数をExitに渡すと、さらに別のオブジェクトが作成されます。 Exitに渡されるオブジェクトとEnterに渡されるオブジェクトが異なるため、MonitorはSynchronizationLockExceptionを投げます。 詳細については、概念トピック「モニター」をご覧ください。
先の:
Centos 6.4システム上でPython 2.6.6から2.7.5へアップグレードする
次に:
Directory.GetCurrentDirectory と Application.StartupPath の違い
閲覧したセクション
ニシキヘビ
Windows/Linux
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。
Mail To:help@itsvse.com