Ejemplo n.º 1
0
 /// <summary>
 /// Adds an event handler to the list
 /// </summary>
 /// <param name="e">The event from which we add a handler</param>
 /// <param name="del">The callback method</param>
 public void AddHandler(RoadEvent e, RoadEventHandler del)
 {
     try
     {
         m_lock.AcquireWriterLock(TIMEOUT);
         try
         {
             WeakMulticastDelegate deleg = (WeakMulticastDelegate)m_events[e];
             if (deleg == null)
             {
                 m_events[e] = new WeakMulticastDelegate(del);
             }
             else
             {
                 m_events[e] = WeakMulticastDelegate.Combine(deleg, del);
             }
         }
         finally
         {
             m_lock.ReleaseWriterLock();
         }
     }
     catch (ApplicationException ex)
     {
         if (log.IsErrorEnabled)
         {
             log.Error("Failed to add event handler!", ex);
         }
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Registers an edge with this vertex' local mappings. This operation is thread-safe.
        /// </summary>
        /// <param name="e">The Edge to register</param>
        internal void RegisterEdge(Edge e)
        {
            _rwl.AcquireWriterLock(-1);


            // undirected edges are added to the _undirectedEdges map
            if (e.EdgeType == EdgeType.Undirected)
            {
                Vertex neighbor = (e.Source == this) ? e.Target : e.Source;

                _predecessors.Add(neighbor.ID, neighbor);
                _predecessorToEdgeMap.Add(neighbor.ID, e);

                _successors.Add(neighbor.ID, neighbor);
                _successorToEdgeMap.Add(neighbor.ID, e);


                _undirectedEdges.Add(e.ID, e);
            }
            else if (e.EdgeType == EdgeType.DirectedAB)
            {
                if (e.A == this)
                {
                    _successors.Add(e.B.ID, e.B);
                    _successorToEdgeMap.Add(e.B.ID, e);

                    _outgoingEdges.Add(e.ID, e);
                }
                else if (e.B == this)
                {
                    _predecessors.Add(e.A.ID, e.A);
                    _predecessorToEdgeMap.Add(e.A.ID, e);

                    _incomingEdges.Add(e.ID, e);
                }
            }
            else if (e.EdgeType == EdgeType.DirectedBA)
            {
                if (e.B == this)
                {
                    _successors.Add(e.A.ID, e.A);
                    _successorToEdgeMap.Add(e.A.ID, e);

                    _outgoingEdges.Add(e.ID, e);
                }
                else if (e.A == this)
                {
                    _predecessors.Add(e.B.ID, e.B);
                    _predecessorToEdgeMap.Add(e.B.ID, e);

                    _incomingEdges.Add(e.ID, e);
                }
            }

            _rwl.ReleaseWriterLock();
        }
Ejemplo n.º 3
0
 public void Write(Action <T> writeMethod)
 {
     readerWriterLock.AcquireWriterLock(int.MaxValue);
     try
     {
         writeMethod(data);
         if (path != null)
         {
             File.WriteAllText(path, SerializeObject(data, Newtonsoft.Json.Formatting.Indented));
         }
     }
     finally { readerWriterLock.ReleaseWriterLock(); }
 }
Ejemplo n.º 4
0
            public override PreviousPayment this[int i]
            {
                get
                {
                    PreviousPayment thisItem;
                    rwLock.AcquireReaderLock(timeout);

                    try
                    {
                        thisItem = collection[i];
                    }
                    finally
                    {
                        rwLock.ReleaseReaderLock();
                    }

                    return(thisItem);
                }

                set
                {
                    rwLock.AcquireWriterLock(timeout);

                    try
                    {
                        collection[i] = value;
                    }
                    finally
                    {
                        rwLock.ReleaseWriterLock();
                    }
                }
            }
Ejemplo n.º 5
0
            public override Property this[int i]
            {
                get
                {
                    Property thisItem;
                    _rwLock.AcquireReaderLock(Timeout);

                    try
                    {
                        thisItem = _collection[i];
                    }
                    finally
                    {
                        _rwLock.ReleaseReaderLock();
                    }

                    return(thisItem);
                }

                set
                {
                    _rwLock.AcquireWriterLock(Timeout);

                    try
                    {
                        _collection[i] = value;
                    }
                    finally
                    {
                        _rwLock.ReleaseWriterLock();
                    }
                }
            }
            public override eServiceCategory this[int i]
            {
                get
                {
                    eServiceCategory thisItem;
                    rwLock.AcquireReaderLock(timeout);

                    try
                    {
                        thisItem = collection[i];
                    }
                    finally
                    {
                        rwLock.ReleaseReaderLock();
                    }

                    return(thisItem);
                }

                set
                {
                    rwLock.AcquireWriterLock(timeout);

                    try
                    {
                        collection[i] = value;
                    }
                    finally
                    {
                        rwLock.ReleaseWriterLock();
                    }
                }
            }
Ejemplo n.º 7
0
            public override StatementPhoneNumber this[int i]
            {
                get
                {
                    StatementPhoneNumber thisItem;
                    rwLock.AcquireReaderLock(timeout);

                    try
                    {
                        thisItem = collection[i];
                    }
                    finally
                    {
                        rwLock.ReleaseReaderLock();
                    }

                    return(thisItem);
                }

                set
                {
                    rwLock.AcquireWriterLock(timeout);

                    try
                    {
                        collection[i] = value;
                    }
                    finally
                    {
                        rwLock.ReleaseWriterLock();
                    }
                }
            }
        private void cleaner_Elapsed(object sender, ElapsedEventArgs e)
        {
            var timeToClean = DateTime.Now.AddMinutes(-5);

            try
            {
                rwlock.AcquireWriterLock(lockingTimeout);

                while (codes.Count > 0 && codes.Peek().UseDate < timeToClean)
                {
                    codes.Dequeue();
                }
            }
            finally
            {
                rwlock.ReleaseWriterLock();
            }
        }
Ejemplo n.º 9
0
 public void Set(string key, string value)
 {
     l.Debug("Set(" + key + " ," + value + ");");
     Lock.AcquireWriterLock(1000);
     try
     {
         if (settings.ContainsKey(key))
         {
             settings[key] = value;
         }
         else
         {
             settings.Add(key, value);
         }
         Save();
     }
     finally
     {
         Lock.ReleaseWriterLock();
     }
 }
Ejemplo n.º 10
0
 public Lock(System.Threading.ReaderWriterLock rwl, LockType lt)
 {
     rwlock = rwl;
     if (type == LockType.ForReading)
     {
         rwl.AcquireReaderLock(-1);
     }
     else if (type == LockType.ForWriting)
     {
         rwl.AcquireWriterLock(-1);
     }
 }
 public new Add(LoadedJockey j)
 {
     try
     {
         _rw_lock.AcquireWriterLock(5000);    // or whatever you deem an acceptable timeout
         base.Add(j);
     }
     finally
     {
         _rw_lock.ReleaseWriterLock();
     }
 }
Ejemplo n.º 12
0
 /// <summary>
 /// 移除键值对
 /// </summary>
 public void Clear()
 {
     if (dictionary.Count > 0)
     {
         rwLock.AcquireWriterLock(lockTimeOut);
         try
         {
             dictionary.Clear();
         }
         finally
         {
             rwLock.ReleaseWriterLock();
         }
     }
 }
Ejemplo n.º 13
0
        public Lock(System.Threading.ReaderWriterLock rwl, LockType lt)
        {
            rwlock = rwl;
            if (type == LockType.ForReading)
            {
                rwl.AcquireReaderLock(-1);
            }
            else if (type == LockType.ForWriting)
            {
                rwl.AcquireWriterLock(-1);
            }

#if DEBUG
            callingfunction = new System.Diagnostics.StackTrace();
#endif
        }
Ejemplo n.º 14
0
 /// <summary>
 /// Constructor
 /// </summary>
 public WriteLock(System.Threading.ReaderWriterLock lk, System.TimeSpan timeout)
 {
     _lock = lk;
     if (null == _lock)
     {
         throw new System.ArgumentNullException("Error 2719124605: Null lock given");
     }
     try
     {
         // If this thread holds a read-lock then it has to release it before
         // getting the write-lock. Otherwise, the attempt to acquire the
         // write-lock below will block.
         if (true == _lock.IsReaderLockHeld)
         {
             throw new System.Exception("Error 3637580726: Reader-lock is already held");
         }
         _lock.AcquireWriterLock(timeout);
     }
     catch (System.ApplicationException e)
     {
         System.Console.WriteLine("Error 3725156970: Failed to obtain lock for writing. {0}", e.Message);
         throw;
     }
 }
Ejemplo n.º 15
0
 private void ProcessStorage()
 {
     try
     {
         obj_rwl.AcquireWriterLock(System.Threading.Timeout.Infinite);
         //在对象集合中寻找
         List <CCacheItem_WuQi <K, T> > result = new List <CCacheItem_WuQi <K, T> >();
         foreach (KeyValuePair <K, CCacheItem_WuQi <K, T> > defront in obj_containers)
         {
             CCacheItem_WuQi <K, T> item = (CCacheItem_WuQi <K, T>)defront.Value;
             if (false != item.IsExpire(intervalMinuteTime))
             {
                 result.Add(item);
             }
         }
         foreach (CCacheItem_WuQi <K, T> item in result)
         {
             obj_containers.Remove(item.key);
         }
     }
     catch (System.Exception e)
     {
         CExceptionContainer_WuQi.ProcessException(e);
         throw e;
     }
     finally
     {
         obj_rwl.ReleaseWriterLock();
     }
 }
Ejemplo n.º 16
0
 /// <summary>
 /// 获取写者锁
 /// </summary>
 public void AcquireWriterLock()
 {
     m_lock.AcquireWriterLock(-1);
 }