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

时间:2010-12-06 18:13:16

标签: c# .net locking readerwriterlockslim

我喜欢lock(myLock){ /* do stuff */}的C#中的快捷方式。是否有读/写锁的等价物? (特别是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;
    }

1 个答案:

答案 0 :(得分:14)

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

  1. DoWithWriteLock返回IDisposable
  2. TryEnterWriteLock方法保留在DoWithWriteLock方法
  3. 返回实现IDisposable的对象。在该对象的Dispose方法中,将调用发送到ExitWriteLock
  4. 最终结果:

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