stringオブジェクトってlockに使っちゃいけなかったんですねぇ。値型とSystem.Typeがイカンというのは知ってましたが、こいつは気づきませんでした。
これは、(MS.NETではどうだか知りませんが)AppDomainをまたがって保持されるため、staticコンテキストにおけるlockとは一意性を異にするためです。
コメント
ladybug — 07/22/2005 15:34:01
なるほど>stringをlock
System.Type って問題ありましたっけ?
(「published な要素を lock するのは常に deadlock の危険性がある」という意味なら、Type 型に限定した話じゃないし)
atsushieno — 07/22/2005 15:58:41
理屈としては、System.Typeに限らず、またpublishedであるかどうかに関わらず(リフレクションで取得されたらアウト)、常にdeadlockの危険性はあります。
System.Typeの場合、publishedでないとしても、内部的にさまざまな場面でアクセスされうるので、特に例示されているのだと思います。ランタイム内部で、どの部分でMonitorを考慮しているのか、はたまた型を扱うコードのどの部分がmanagedでどの部分がInternalCallなのかは、明確ではないですよね。