是否有与ReaderWriterLockSlim相同的lock {}语句?

Xod*_*rap 9 .net c# locking readerwriterlockslim

我喜欢C#中的快捷方式lock(myLock){ /* do stuff */}.是否有读/写锁的等价物?(特别是ReaderWriterLockSlim.)现在,我使用以下自定义方法,我认为它有效,但有点烦人,因为我必须将我的操作作为匿名函数传递,我宁愿使用标准锁定机制,如果可能的话.

    void bool DoWithWriteLock(ReaderWriterLockSlim RWLock, int TimeOut, Action Fn)
    {
        bool holdingLock = false;
        try
        {
            if (RWLock.TryEnterWriteLock(TimeOut))
            {
                holdingLock = true;
                Fn();
            }
        }
        finally
        {
            if (holdingLock)
            {
                RWLock.ExitWriteLock();
            }
        }
        return holdingLock;
    }
Run Code Online (Sandbox Code Playgroud)

Tim*_*son 14

您无法覆盖lock关键字的行为.一种常见的技术是劫持using关键字.

  1. DoWithWriteLock返回IDisposable
  2. TryEnterWriteLock调用保留在DoWithWriteLock方法内
  3. 返回一个实现的对象IDisposable.在该对象的Dispose方法中,将调用放入ExitWriteLock.

最终结果:

// Before
DoWithWriteLock(rwLock,
    delegate
    {
        Do1();
        Do2()
    } );

// After
using (DoWithWriteLock(rwLock))
{
    Do1();
    Do2();
}
Run Code Online (Sandbox Code Playgroud)

  • 在实际实现中,最好返回一个公开实现IDisposable的结构(以避免不必要的堆分配和/或装箱); 有关背景信息,请参阅http://blogs.msdn.com/b/ericgu/archive/2004/03/24/95743.aspx. (2认同)