Tôi đã viết mã đơn giản (kèm theo) và tôi không hiểu tại sao khóa trên một số khối không khóa phạm vi.Tại sao khóa trong mã này không hoạt động?
Mã:
object locker = new object();
private void foo(int i)
{
Console.WriteLine(string.Format("i is {0}", i));
lock(locker)
{
while(true)
{
Console.WriteLine(string.Format("i in while loop is {0}", i)) ;
foo(++i);
}
}
}
tôi hy vọng rằng sự kêu gọi đối với phương pháp foo trong vòng lặp while sẽ chờ đợi cho đến khi thay đồ sẽ được phát hành (thay đồ phạm vi) - nhưng tất cả các cuộc gọi của foo với arg của ++ tôi có thể nhập vào khối thay đồ.
Tôi nghĩ rằng cùng một chủ đề của nó nên không khóa chính nó (có thể ai đó biết chi tiết hơn) – V4Vendetta
tôi chắc chắn đã học được điều gì đó mới mẻ này, +1 –
Nếu bạn đã ở trong phòng tắm, và cửa là đã bị khóa, và bạn đặt một khóa * thứ hai trên cửa, * bạn vẫn còn trong phòng tắm rồi. * –