tôi hy vọng các mã sau vào bế tắc khi rõ ràng cố gắng để khóa trên cùng một đối tượng mà xây dựng đã bị khóa:Tại sao mã bế tắc này lại không?
void Main()
{
(new SiteMap()).Build();
}
class SiteMap
{
private readonly object _lock = new object();
public void Build()
{
lock (_lock)
{
Clear();
Console.WriteLine("Build");
}
}
public void Clear()
{
lock (_lock)
{
Console.WriteLine("Clear");
}
}
}
Output:
Rõ ràng
Build
Sửa 1
Cảm ơn tất cả các bạn đã trả lời.
Nếu tôi thêm một cuộc gọi để xây dựng bên trong khóa của Clear (giữ phần còn lại của các mã giống nhau):
public void Clear()
{
lock (_lock)
{
Build();
Console.WriteLine("Clear");
}
}
Một bế tắc không xảy ra (hoặc ít nhất đó là những gì tôi nghĩ, LINQ Pad treo).
Theo câu trả lời của bạn, điều này sẽ không xảy ra, bởi vì nó vẫn là cùng một chuỗi.
Cảm ơn!
Xem http://www.albahari.com/threading/part2.aspx, trong "Khóa lồng nhau". –