c#中的重点锁
如果我写一些这样的代码:class Program { static void Main(string[] args) { Foo(); Console.ReadLine(); } static void Foo() { lock(_lock) { Console.WriteLine("Foo"); Bar(); } } static void Bar() { lock(_lock) { Console.WriteLine("Bar"); } } private static readonly object _lock = new object(); }
我作为输出:
Foo
Bar
我希望这将僵局,因为Foo获得了锁,然后等待Bar获得锁。 但这不会发生。
锁定机制只会允许这样做,因为代码是在同一线程上执行的?
对于同一线程,锁定始终是reentrant
,因此线程可以按照自己的意愿锁定对象。