예제 #1
0
        private static void Release([NotNull] object key)
        {
            InnerLock _lock;

            lock (Locks)
            {
                lock (_lock = Locks[key])
                {
                    _lock.Release();
                    if (_lock.CanDispose)
                    {
                        Locks.Remove(key);
                        _lock.Dispose();
                    }
                }
            }
        }
예제 #2
0
 private void ReleaseLock()
 {
     lock (sync)
     {
         if (lockID == Guid.Empty)
         {
             throw new InvalidOperationException("This instance cannot " +
                                                 "be unlocked because no lock currently exists.");
         }
         object currentLock;
         Locks.TryGetValue(lockID, out currentLock);
         if (currentLock == SlotMarker)
         {
             Locks.Remove(lockID);
             lockID = Guid.Empty;
         }
         else
         {
             throw new InvalidOperationException("Unlock must be invoked " +
                                                 "from same thread that invoked Lock.");
         }
     }
 }