/// <summary>
        /// Initializes a new instance of the <see cref="FairReaderWriterLock"/> class.
        /// </summary>
        public FairReaderWriterLock(int lockTimeout)
        {
            _uMainLock    = new SpinLock(true);
            _uLockFlags   = LockFlags.None;
            _uSharedCount = 0;

            ReadLock  = new CommonReadLock(this, lockTimeout);
            WriteLock = new CommonWriteLock(this, lockTimeout);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="SlimReaderWriterLock"/> class.
        /// </summary>
        public SlimReaderWriterLock()
        {
#if MONO
            throw new NotSupportedException(ExceptionText);
#else
            _rwLock   = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
            ReadLock  = new CommonReadLock(this);
            WriteLock = new CommonWriteLock(this);

            _rDisposable = new TrackedDisposable(ReleaseReaderLock);
            _wDisposable = new TrackedDisposable(ReleaseWriterLock);
#endif
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="FairReaderWriterLock"/> class.
        /// </summary>
        public FifoReaderWriterLock()
        {
#if STATISTICS
            _id = Convert.ToBase64String(Guid.NewGuid().ToByteArray());
#endif

            _wnode = _rnode = new Node(NodeFlags.None);

#if STATISTICS
            _wnode.LockId = _id;
#endif

            ReadLock  = new CommonReadLock <Node>(this);
            WriteLock = new CommonWriteLock <Node>(this);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="StandardReaderWriterLock"/> class.
 /// </summary>
 public StandardReaderWriterLock()
 {
     _rwLock   = new ReaderWriterLock();
     ReadLock  = new CommonReadLock(this);
     WriteLock = new CommonWriteLock(this);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="StandardReaderWriterLock"/> class.
 /// </summary>
 public StandardReaderWriterLock(int lockTimeout)
 {
     _rwLock   = new ReaderWriterLock();
     ReadLock  = new CommonReadLock(this, lockTimeout);
     WriteLock = new CommonWriteLock(this, lockTimeout);
 }