誰かがC#の任意のタイプのオブジェクトでそれが可能である理由を詳細に説明できますか?lock
何lock
のために、どのように使うのか理解しています。私はそれがMonitor.Enter
/にどのように拡張するかを知っていますExit
。実装の詳細と設計上の考慮事項の説明を探しています。
まず第一に:内部で何が起こっているのですか?例:オブジェクトインスタンスに(RTTI / vtableの場合のように)それを機能させる余分なビットがありますか?または、オブジェクト参照をキーとするある種のルックアップテーブルですか?(もしそうなら、これはGCとどのように相互作用しますか?)または何か他のもの?ロックデータが何であれ、保持するために特定のタイプのインスタンスを作成する必要がないのはなぜですか?
(ちなみに、ネイティブコードでは何をしEnter
てマップしますか?)Exit
そして、第二に、なぜ.NETはロックを解除するための特定のタイプを持たないように設計されているのですか?(とにかく目的のために作成するのが一般的であり、new object()
「古いオブジェクト」をロックするほとんどの場合は問題があります。)この設計の選択は、実装の詳細によって強制されましたか?それとも意図的でしたか?そして、意図的にすれば、それは良い選択でしたか?(この2番目の部分には推測が必要な場合があることを理解しています。)