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;
public static ref ReaderWriterLockType.LockCountType GetLockCount(ref ReaderWriterLockType rwLock) { return(ref rwLock.LockCount); }
public static void ClearWriteLockCount(ref ReaderWriterLockType rwLock) { rwLock.LockCount.WriteLockCount = 0; }
public virtual string GetCrossProcessLockType(ReaderWriterLockType type) => type + this.CreateReaderWriterLock(string.Empty).GetType().Name;
public override string GetCrossProcessLockType(ReaderWriterLockType type) => $"{type}{nameof(RedisDistributedReaderWriterLock)}{this.Strategy.DatabaseProvider.CrossProcessLockTypeSuffix}";