【发布时间】:2011-10-12 15:27:13
【问题描述】:
当一个线程到达一个线程时,有没有一种快速的方法来记录一个线程正在等待一个锁
lock(x)
{
//do work on a collection
}
?
如果线程 1 到达锁,并且块中没有另一个线程,则应该没有日志。那么如果线程 2 到达 lock(x) 并且线程 1 仍然在块中,那么应该有一个日志。理想的解决方案不需要切换到 Mutex 或 Monitor 会增加太多复杂性。如果有一种使用 TPL、PLINQ 或 RX 的快速简便的方法来做到这一点,那就太好了。
【问题讨论】:
-
我认为您必须将
lock的简写扩展为等效的长写并手动插入日志记录。 -
当我说理想的解决方案不需要切换到互斥锁时,我的意思是它不需要明确使用互斥锁或监视器。我编辑了最初的问题以反映这一点。我确实需要这个只是为了调试并且希望语法尽可能简单。
-
那么 PostSharp 就是要走的路。
标签: c# locking system.reactive task-parallel-library plinq