<PackageReference Include="Castle.Windsor" Version="6.0.0" />

SlimReadWriteLock

public class SlimReadWriteLock : Lock
using System.Threading; namespace Castle.MicroKernel.Internal { public class SlimReadWriteLock : Lock { private readonly ReaderWriterLockSlim locker = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion); public bool IsReadLockHeld => locker.IsReadLockHeld; public bool IsUpgradeableReadLockHeld => locker.IsUpgradeableReadLockHeld; public bool IsWriteLockHeld => locker.IsWriteLockHeld; public override IUpgradeableLockHolder ForReadingUpgradeable() { return ForReadingUpgradeable(true); } public override ILockHolder ForReading() { return ForReading(true); } public override ILockHolder ForWriting() { return ForWriting(true); } public override IUpgradeableLockHolder ForReadingUpgradeable(bool waitForLock) { return new SlimUpgradeableReadLockHolder(locker, waitForLock, locker.IsUpgradeableReadLockHeld || locker.IsWriteLockHeld); } public override ILockHolder ForReading(bool waitForLock) { if (locker.IsReadLockHeld || locker.IsUpgradeableReadLockHeld || locker.IsWriteLockHeld) return NoOpLock.Lock; return new SlimReadLockHolder(locker, waitForLock); } public override ILockHolder ForWriting(bool waitForLock) { if (!locker.IsWriteLockHeld) return new SlimWriteLockHolder(locker, waitForLock); return NoOpLock.Lock; } } }