Пример #1
0
 public bool Signal(int signalCount)
 {
     if (signalCount <= 0)
     {
         throw new ArgumentOutOfRangeException("signalCount");
     }
     else
     {
         CheckDisposed();
         int lastValue;
         if (ThreadingHelper.SpinWaitRelativeExchangeUnlessNegative(ref _currentCount, -signalCount, out lastValue))
         {
             var result = lastValue - signalCount;
             if (result == 0)
             {
                 _event.Set();
                 return(true);
             }
             else
             {
                 return(false);
             }
         }
         else
         {
             throw new InvalidOperationException("Below Zero");
         }
     }
 }
        public int Release(int releaseCount)
        {
            CheckDisposed();
            if (releaseCount < 1)
            {
                throw new ArgumentOutOfRangeException("releaseCount", "releaseCount is less than 1");
            }
            int oldValue;

            if (ThreadingHelper.SpinWaitRelativeExchangeUnlessNegative(ref _count, -releaseCount, out oldValue))
            {
                Awake();
                return(oldValue);
            }
            throw new SemaphoreFullException();
        }