2010-03-09 29 views

Trả lời

13

Tôi không tin là có. Có những thứ hack dữ dội bạn có thể làm như gọi số Monitor.Wait(monitor, 0) và bắt số SynchronizationLockException, nhưng điều đó khá khủng khiếp (và về lý thuyết có thể "bắt" một xung mà một chuỗi khác đang đợi).

Tôi đề nghị bạn thử thiết kế lại để bạn không cần điều này, tôi sợ.

EDIT: Trong .NET 4.5, tính năng này có sẵn với Monitor.IsEntered.

+0

Cảm ơn Jon, may mắn thay, chúng tôi không cố gắng sử dụng nó, nó chỉ là một cái gì đó mà xuất hiện trong đầu tôi khi tôi đọc qua một số bài viết về luồng trong C# :-P – theburningmonk

+0

hi Jon, trong C# 4.5 này bây giờ có thể với [Monitor.IsEntered (Object obj)] (http://msdn.microsoft.com/en-us/library/system.threading.monitor.isentered.aspx) phải không? – Ben

+1

@Ben: Giả sử bạn có nghĩa là .NET 4.5, vâng. Sẽ chỉnh sửa. –

1

Thông tin liên quan được lưu trữ bởi cấu trúc SyncBlock được CLR sử dụng và có thể xem trong khi gỡ lỗi với ví dụ: WinDbg + sos. Theo hiểu biết của tôi thì không có cách nào để lấy thông tin từ mã được quản lý, nhưng có thể có thể từ mã không an toàn giả sử bạn bằng cách nào đó (và đáng tin cậy) thu được con trỏ tới dữ liệu liên quan được CLR sử dụng.

Các vấn đề liên quan