Ejemplo n.º 1
0
 public void TryEnter(int millisecondsTimeout, ref bool lockTaken)
 {
     if (_disableThreadTracking)
     {
         if (ThreadingHelper.SpinWaitSet(ref _isHeld, 1, 0, millisecondsTimeout))
         {
             lockTaken = true;
         }
     }
     else
     {
         if (IsHeldByCurrentThread)
         {
             //Throw on recursion
             throw new LockRecursionException();
         }
         else
         {
             if (ThreadingHelper.SpinWaitSet(ref _isHeld, 1, 0, millisecondsTimeout) && ReferenceEquals(Interlocked.CompareExchange(ref _ownerThread, Thread.CurrentThread, null), null))
             {
                 lockTaken = true;
             }
         }
     }
 }
Ejemplo n.º 2
0
 public void TryEnter(int millisecondsTimeout, ref bool lockTaken)
 {
     if (IsThreadOwnerTrackingEnabled)
     {
         lockTaken |= ThreadingHelper.SpinWaitSet(ref _isHeld, 1, 0, millisecondsTimeout);
     }
     else
     {
         if (IsHeldByCurrentThread)
         {
             //Throw on recursion
             throw new LockRecursionException();
         }
         lockTaken |= ThreadingHelper.SpinWaitSet(ref _isHeld, 1, 0, millisecondsTimeout) && Interlocked.CompareExchange(ref _ownerThread, Thread.CurrentThread, null) == null;
     }
 }