このコードがあるとしましょう:
object o1 = new Object();
object o2 = o1;
o1 でロックを取得することは、o2 でロックを取得することと同じですか? (o1 がロックされている場合、o1 が解放されるまでロック o2 はブロックされますか?)
このコードがあるとしましょう:
object o1 = new Object();
object o2 = o1;
o1 でロックを取得することは、o2 でロックを取得することと同じですか? (o1 がロックされている場合、o1 が解放されるまでロック o2 はブロックされますか?)
参照自体をロックした場合、ロックはまったく役に立ちません。問題は、参照自体が値によってコピーされるため、すぐに破棄される一時的なコピーを常にロックしていることです。
だから、それはそれがどのように機能するかではありません。ロックは、参照自体ではなく、参照が参照するインスタンスで取得されます。
はい、ロックはオブジェクト参照ではなくオブジェクトに対して取得されるためです。o2 = o1
オブジェクトではなく参照をコピーします。
はい、.NET は参照をロックします (値の型をロックするとエラーが発生します)