System.Threading.ReaderWriterLockSlim.TryEnterUpgradeableReadLock C# (CSharp) Method

TryEnterUpgradeableReadLock() public method

public TryEnterUpgradeableReadLock ( int millisecondsTimeout ) : bool
millisecondsTimeout int
return bool
		public bool TryEnterUpgradeableReadLock (int millisecondsTimeout)
		{
			if (millisecondsTimeout < Timeout.Infinite)
				throw new ArgumentOutOfRangeException ("millisecondsTimeout");

			if (read_locks == null)
				throw new ObjectDisposedException (null);

			if (IsUpgradeableReadLockHeld)
				throw new LockRecursionException ();

			if (IsWriteLockHeld)
				throw new LockRecursionException ();

			EnterMyLock ();
			while (true){
				if (owners == 0 && numWriteWaiters == 0 && upgradable_thread == null){
					owners++;
					upgradable_thread = Thread.CurrentThread;
					break;
				}

				// If the request is to probe
				if (millisecondsTimeout == 0){
					ExitMyLock ();
					return false;
				}

				if (readEvent == null){
					LazyCreateEvent (ref readEvent, false);
					// since we left the lock, start over.
					continue;
				}

				if (!WaitOnEvent (readEvent, ref numReadWaiters, millisecondsTimeout))
					return false;
			}

			ExitMyLock ();
			return true;
		}

Same methods

ReaderWriterLockSlim::TryEnterUpgradeableReadLock ( TimeSpan timeout ) : bool

Usage Example

        public SlimUpgradeableReadLockHolder(ReaderWriterLockSlim locker, bool waitForLock, bool wasLockAlreadyHelf)
        {
            this.locker = locker;
            if (wasLockAlreadyHelf)
            {
                lockAcquired = true;
                wasLockAlreadyHeld = true;
                return;
            }

            if(waitForLock)
            {
                locker.EnterUpgradeableReadLock();
                lockAcquired = true;
                return;
            }

            lockAcquired = locker.TryEnterUpgradeableReadLock(0);
        }
All Usage Examples Of System.Threading.ReaderWriterLockSlim::TryEnterUpgradeableReadLock