public ReaderWriteLockDisposable(ReaderWriterLockSlim locker, ReaderWriterLockType lockerType)
        {
            this._locker     = locker;
            this._lockerType = lockerType;

            switch (lockerType)
            {
            case ReaderWriterLockType.Write:
                locker.EnterWriteLock();
                break;

            case ReaderWriterLockType.Read:
                locker.EnterReadLock();
                break;

            case ReaderWriterLockType.UpgradeableRead:
                locker.EnterUpgradeableReadLock();
                break;

            case ReaderWriterLockType.None:
                break;

            default:
                break;
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ReaderWriterLockDisposable"/> class.
        /// </summary>
        /// <param name="rwLock">The readers–writer lock</param>
        /// <param name="readerWriteLockType">Lock type</param>
        public ReaderWriterLockDisposable(ReaderWriterLockSlim rwLock, ReaderWriterLockType readerWriteLockType = ReaderWriterLockType.Write)
        {
            _rwLock = rwLock;
            _readerWriteLockType = readerWriteLockType;

            switch (_readerWriteLockType)
            {
            case ReaderWriterLockType.Read:
                _rwLock.EnterReadLock();
                break;

            case ReaderWriterLockType.Write:
                _rwLock.EnterWriteLock();
                break;

            case ReaderWriterLockType.UpgradeableRead:
                _rwLock.EnterUpgradeableReadLock();
                break;
            }
        }
 public static void AcquireReadLockImpl(this OsStateImpl os, ref ReaderWriterLockType rwLock)
 {
     ref InternalCriticalSection cs = ref GetLockCount(ref rwLock).Cs;
示例#4
0
 public static ref ReaderWriterLockType.LockCountType GetLockCount(ref ReaderWriterLockType rwLock)
 {
     return(ref rwLock.LockCount);
 }
示例#5
0
 public static void ClearWriteLockCount(ref ReaderWriterLockType rwLock)
 {
     rwLock.LockCount.WriteLockCount = 0;
 }
示例#6
0
 public virtual string GetCrossProcessLockType(ReaderWriterLockType type) =>
 type + this.CreateReaderWriterLock(string.Empty).GetType().Name;
示例#7
0
 public override string GetCrossProcessLockType(ReaderWriterLockType type) => $"{type}{nameof(RedisDistributedReaderWriterLock)}{this.Strategy.DatabaseProvider.CrossProcessLockTypeSuffix}";