Tio*_*ion 2 c# locking plinq task-parallel-library system.reactive
当线程到达时,是否有一种快速记录线程正在等待锁定的方法
lock(x)
{
//do work on a collection
}
Run Code Online (Sandbox Code Playgroud)
?
如果线程1到达锁定,并且块中没有另一个线程,则应该没有日志.然后,如果线程2到达锁(x)并且线程1仍然在块中,则应该有一个日志.理想的解决方案不需要切换到互斥锁或监视器会增加复杂性.如果有一种快速简便的方法可以使用TPL,PLINQ或RX来做到这一点,那就太棒了.
dtb*_*dtb 10
您可以对lock语句进行除糖并使用Monitor.TryEnter来检查是否可以在不等待的情况下获取锁定:
bool lockTaken = false;
var obj = x;
try
{
Monitor.TryEnter(obj, ref lockTaken);
if (!lockTaken)
{
Log();
Monitor.Enter(obj, ref lockTaken);
}
//do work on a collection
}
finally
{
if (lockTaken)
{
Monitor.Exit(obj);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
794 次 |
| 最近记录: |