Theo đặc tả ngôn ngữ lock(obj) statement;
sẽ được biên dịch như:Lợi thế của Monitor.Enter (đối tượng, ref bool) trên Monitor.Enter (đối tượng) là gì?
object lockObj = obj; // (the langspec doesn't mention this var, but it wouldn't be safe without it)
Monitor.Enter(lockObj);
try
{
statement;
}
finally
{
Monitor.Exit(lockObj);
}
Tuy nhiên, nó được biên dịch như:
try
{
object lockObj = obj;
bool lockTaken = false;
Monitor.Enter(lockObj, ref lockTaken);
statement;
}
finally
{
if (lockTaken) Monitor.Exit(lockObj);
}
Đó có vẻ là rất nhiều phức tạp hơn cần thiết. Vì vậy, câu hỏi là, lợi thế của việc thực hiện đó là gì?
Tôi chuẩn bị trả lời bản thân sau khi nghĩ về một câu trả lời khác không may đã bị xóa trước khi tôi có thể nhận xét về nó. Làm cho tôi suy nghĩ thêm về khi ngoại lệ có thể bị ném, các luồng bị ngắt quãng có thể ở bất cứ nơi đâu, v.v. Rõ ràng là 'Monitor.Enter' có thể trả về thành công, nhưng trước khi luồng đi vào khối' try' nó có thể bị gián đoạn. Đôi khi trang web này quá nhanh để tôn vinh tất cả những người đã giúp tìm câu trả lời. – Wormbo