8

このコードがあるとしましょう:

object o1 = new Object();
object o2 = o1;

o1 でロックを取得することは、o2 でロックを取得することと同じですか? (o1 がロックされている場合、o1 が解放されるまでロック o2 はブロックされますか?)

4

4 に答える 4

11

参照自体をロックした場合、ロックはまったく役に立ちません。問題は、参照自体が値によってコピーされるため、すぐに破棄される一時的なコピーを常にロックしていることです。

だから、それはそれがどのように機能するかではありません。ロックは、参照自体ではなく、参照が参照するインスタンスで取得されます。

于 2013-01-05T16:38:32.133 に答える
6

ロックを取得することは、ロックをo1取得することと同じo2ですか?

はい。

これは、すべてのオブジェクト インスタンスの一部である同期ブロックと呼ばれるもので動作します。しかし、機能的には、オブジェクトを Dictionary のキーとして使用していると考えることができます。

参照をロックすることは、値型をロックすることと同じですが、同じ問題があります。

于 2013-01-05T16:29:45.673 に答える
2

はい、ロックはオブジェクト参照ではなくオブジェクトに対して取得されるためです。o2 = o1オブジェクトではなく参照をコピーします。

于 2013-01-05T16:32:30.840 に答える
-1

はい、.NET は参照をロックします (値の型をロックするとエラーが発生します)

于 2013-01-05T16:32:20.230 に答える