private static void LockOnReaderWriterLock() { Console.WriteLine("About to lock on the ReaderWriterLock. Debug after seeing \"Signaled to acquire the reader lock.\""); ReaderWriterLock rwLock = new ReaderWriterLock(); ManualResetEvent rEvent = new ManualResetEvent(false); ManualResetEvent pEvent = new ManualResetEvent(false); ThreadPool.QueueUserWorkItem((object state) => { rwLock.AcquireWriterLock(-1); Console.WriteLine("Writer lock acquired!"); rEvent.Set(); pEvent.WaitOne(); }); rEvent.WaitOne(); Console.WriteLine("Signaled to acquire the reader lock."); rwLock.AcquireReaderLock(-1); Console.WriteLine("Reader lock acquired"); pEvent.Set(); Console.WriteLine("About to end the program. Press any key to exit."); Console.ReadKey(); }
/// <summary> /// Returns the System Defaults as a Typed DataTable. /// <para> /// The caller doesn't need to know whether the Cache is already populated - if /// this should be necessary, this function will make a request to populate the /// cache. /// </para> /// </summary> /// <returns>System Defaults as a Typed DataTable.</returns> public SSystemDefaultsTable GetSystemDefaultsTable() { SSystemDefaultsTable ReturnValue; // Obtain thread-safe access to the FTableCached Field to prevent two (or more) Threads from getting a different // FTableCached value! lock (FTableCachedLockCookie) { if (!FTableCached) { LoadSystemDefaultsTable(); FTableCached = true; } } try { /* * Try to get a read lock on the cache table [We don't specify a timeout because * (1) reading an emptied cache would lead to problems (it is emptied before the DB queries are issued), * (2) reading the DB tables into the cached table should be fairly quick] */ FReadWriteLock.AcquireReaderLock(SharedConstants.THREADING_WAIT_INFINITE); ReturnValue = FSystemDefaultsDT; } finally { // Release read lock on the cache table FReadWriteLock.ReleaseReaderLock(); } return(ReturnValue); }
/// <summary> /// Returns the System Defaults as a Typed DataTable. /// /// The caller doesn't need to know whether the Cache is already populated - if /// this should be necessary, this function will make a request to populate the /// cache. /// /// </summary> /// <returns>System Defaults as a Typed DataTable. /// </returns> public SSystemDefaultsTable GetSystemDefaultsTable() { SSystemDefaultsTable ReturnValue; if (!FTableCached) { LoadSystemDefaultsTable(); FTableCached = true; } try { /* * Try to get a read lock on the cache table [We don't specify a timeout because * (1) reading an emptied cache would lead to problems (it is emptied before the DB queries are issued), * (2) reading the DB tables into the cached table should be fairly quick] */ FReadWriteLock.AcquireReaderLock(SharedConstants.THREADING_WAIT_INFINITE); ReturnValue = FSystemDefaultsDT; } finally { // Release read lock on the cache table FReadWriteLock.ReleaseReaderLock(); } return(ReturnValue); }
public static Command DoActionWithReaderLock(Func <Command> funcToRun) { Command found = null; bool hadLock = false; if (_lock.IsWriterLockHeld || _lock.IsReaderLockHeld) { //use it; hadLock = true; } else { _lock.AcquireReaderLock(_writerLockTimeoutMs); } if (!_lock.IsReaderLockHeld) { throw new ApplicationException("Unable to acquire Reader lock on CommandQueue (to return single) after waiting " + _writerLockTimeoutMs + " milliseconds."); } //do the thing found = funcToRun(); if (hadLock) { //keep it } else { //Reset the _lock.ReleaseReaderLock(); } return(found); }
//获取告警字符串 public CommandMsgV2 ConvertToMsg() { try { SyncRoot.AcquireReaderLock(-1); CommandMsgV2 msg = new CommandMsgV2(); msg.TK_CommandType = Constants.TK_CommandType.ALARM_REPORT; msg.SeqID = CommandProcessor.AllocateID(); msg.SetValue("集中告警流水号", TKSn.ToString()); msg.SetValue("厂商告警流水号", ManuSn); msg.SetValue("告警城市", City); msg.SetValue("设备厂商", Manufacturer); msg.SetValue("业务类型", BusinessType); msg.SetValue("网元名称", NeName); msg.SetValue("网元类型", NeType); msg.SetValue("对象名称", ObjName); msg.SetValue("对象类型", ObjType); msg.SetValue("告警名称", AlarmName); msg.SetValue("重定义告警名称", Redefinition); //msg.SetValue("告警种类", Category); msg.SetValue("告警级别", Severity); msg.SetValue("告警发生时间", OccurTime); msg.SetValue("告警确认时间LV1", AckTimeLV1); msg.SetValue("再次确认时间LV1", AckAgainTimeLV1); msg.SetValue("告警确认时间LV2", AckTimeLV2); msg.SetValue("再次确认时间LV2", AckAgainTimeLV2); msg.SetValue("告警恢复时间", ClearTime); msg.SetValue("告警定位信息", Location); msg.SetValue("操作员信息LV11", OperatorLV11); msg.SetValue("操作员信息LV12", OperatorLV12); msg.SetValue("操作员信息LV21", OperatorLV21); msg.SetValue("操作员信息LV22", OperatorLV22); msg.SetValue("工程上报信息", ProjectInfo); msg.SetValue("派单人LV1", OrderOperatorLV1); msg.SetValue("派单号LV1", OrderIDLV1); msg.SetValue("派单时间LV1", OrderTimeLV1); msg.SetValue("派单人LV2", OrderOperatorLV2); msg.SetValue("派单号LV2", OrderIDLV2); msg.SetValue("派单时间LV2", OrderTimeLV2); msg.SetValue("OMCName", OMCName); msg.SetValue("Reserved2", Reserved2); msg.SetValue("Reserved3", Reserved3); msg.SetValue("接收时间", ReceiveTime); msg.SetValue("工程超时", ProjectTimeOut); return(msg); } finally { SyncRoot.ReleaseReaderLock(); } }
public static int GetGPRate() { m_lock.AcquireReaderLock(Timeout.Infinite); int rate = 1; try { if (_RateInfo.Rate == -1) { return(1); } if (_RateInfo.BeginDay != null && _RateInfo.EndDay != null) { if (_RateInfo.BeginDay.Year <= DateTime.Now.Year && DateTime.Now.Year <= _RateInfo.EndDay.Year) { if (_RateInfo.BeginDay.DayOfYear <= DateTime.Now.DayOfYear && DateTime.Now.DayOfYear <= _RateInfo.EndDay.DayOfYear) { if (_RateInfo.BeginTime.TimeOfDay <= DateTime.Now.TimeOfDay && DateTime.Now.TimeOfDay <= _RateInfo.EndTime.TimeOfDay) { rate = _RateInfo.Rate; } } } } } catch { } finally { m_lock.ReleaseReaderLock(); } return(rate); }
public ReaderLock(ReaderWriterLock rwLock) { if (null == rwLock) throw new Exception("Don't pass a null ReaderWriterLock object!"); _lock = rwLock; _lock.AcquireReaderLock(Timeout.Infinite); }
internal OletxResourceManager FindOrRegisterResourceManager( Guid resourceManagerIdentifier ) { if (resourceManagerIdentifier == Guid.Empty) { throw new ArgumentException(SR.GetString(SR.BadResourceManagerId), "resourceManagerIdentifier"); } OletxResourceManager oletxResourceManager = null; resourceManagerHashTableLock.AcquireReaderLock(-1); try { oletxResourceManager = resourceManagerHashTable[resourceManagerIdentifier] as OletxResourceManager; } finally { resourceManagerHashTableLock.ReleaseReaderLock(); } if (null == oletxResourceManager) { return(RegisterResourceManager(resourceManagerIdentifier)); } return(oletxResourceManager); }
/// <summary> /// 获取游戏倍率 /// </summary> /// <param name="eType">倍率类型</param> /// <returns></returns> public static float GetRate(eRateType eType) { float rate = 1; m_lock.AcquireReaderLock(Timeout.Infinite); try { RateInfo _RateInfo = GetRateInfoWithType((int)eType); if (_RateInfo == null) { return(rate); } if (_RateInfo.Rate == 0) { return(1); } if (IsValid(_RateInfo)) { rate = _RateInfo.Rate; } } catch { } finally { m_lock.ReleaseReaderLock(); } return(rate); }
/// <summary> /// Executes a job on demand, rather than waiting for its regularly scheduled time. /// </summary> /// <param name="job">The job to be executed.</param> public static void ExecuteJob(JobBase job) { ReaderWriterLock rwLock = new ReaderWriterLock(); try { rwLock.AcquireReaderLock(Timeout.Infinite); if (job.Executing == false) { LockCookie lockCookie = rwLock.UpgradeToWriterLock(Timeout.Infinite); try { if (job.Executing == false) { job.Executing = true; QueueJob(job); } } finally { rwLock.DowngradeFromWriterLock(ref lockCookie); } } } finally { rwLock.ReleaseReaderLock(); } }
/// <summary> /// Gets the element. /// </summary> /// <param name="name">The name.</param> /// <param name="category">The category.</param> /// <param name="culture">The culture.</param> /// <returns></returns> public Element GetElement(string name, string category, string culture) { locker.AcquireReaderLock(Timeout.Infinite); try { string filePath = Path.Combine(this.path, ResXResourceFileHelper.GetFileName(category, culture)); XDocument document = GetResxDocument(filePath); if (document == null) { return(null); } return(document.Root.Elements("data") .Where(it => it.Attribute("name").Value.EqualsOrNullEmpty(name, StringComparison.OrdinalIgnoreCase)) .Select(it => new Element() { Name = it.Attribute("name").Value, Value = it.Element("value").Value, Category = category, Culture = culture }).FirstOrDefault()); } finally { locker.ReleaseReaderLock(); } }
public System.Drawing.Image GetCameraFrameAndState(ref PSMoveSharpState state) { System.Drawing.Image image; camera_frame_state_rwl.AcquireReaderLock(-1); state = camera_frame_state_collector.GetCompleteState(); image = (System.Drawing.Image)camera_frame_state_collector.GetCompleteImage().Clone(); camera_frame_state_rwl.ReleaseReaderLock(); return(image); }
public void TestIsReaderLockHeld () { rwlock = new ReaderWriterLock (); Assert ("a1", !rwlock.IsReaderLockHeld); rwlock.AcquireReaderLock (500); Assert ("a2", rwlock.IsReaderLockHeld); RunThread (new ThreadStart (IsReaderLockHeld_2)); rwlock.ReleaseReaderLock (); }
public static BallInfo FindBall(int GoodsID) { m_lock.AcquireReaderLock(Timeout.Infinite); try { if (_balls.ContainsKey(GoodsID)) { return(_balls[GoodsID]); } } catch { } finally { m_lock.ReleaseReaderLock(); } return(_balls[0]); }
public void TestIsReaderLockHeld () { rwlock = new ReaderWriterLock (); Assert.IsTrue (!rwlock.IsReaderLockHeld, "#1"); rwlock.AcquireReaderLock (500); Assert.IsTrue (rwlock.IsReaderLockHeld, "#1"); RunThread (new ThreadStart (IsReaderLockHeld_2)); rwlock.ReleaseReaderLock (); }
public static StrengthenInfo FindStrengthenInfo(int level) { m_lock.AcquireReaderLock(Timeout.Infinite); try { if (_strengthens.ContainsKey(level)) { return(_strengthens[level]); } } catch { } finally { m_lock.ReleaseReaderLock(); } return(null); }
public List <byte[]> GetCameraFrameAndState(ref PSMoveSharpState state) { List <byte[]> image; camera_frame_state_rwl.AcquireReaderLock(-1); state = camera_frame_state_collector.GetCompleteState(); image = camera_frame_state_collector.GetCompleteImage(); camera_frame_state_rwl.ReleaseReaderLock(); return(image); }
public static ItemTemplateInfo FindAllProp(int id) { m_lock.AcquireReaderLock(Timeout.Infinite); try { if (_allProp.ContainsKey(id)) { return(_allProp[id]); } } catch { } finally { m_lock.ReleaseReaderLock(); } return(null); }
public static ConsortiaInfo FindConsortiaInfo(int consortiaID) { m_lock.AcquireReaderLock(Timeout.Infinite); try { if (_consortia.ContainsKey(consortiaID)) { return(_consortia[consortiaID]); } } catch { } finally { m_lock.ReleaseReaderLock(); } return(null); }
public void DoSth9() { try { myReaderWriterLock.AcquireReaderLock(1000); } finally { myReaderWriterLock.ReleaseReaderLock(); } }
public static ItemTemplateInfo FindItemTemplate(int templateId) { if (_items == null) { Init(); } m_lock.AcquireReaderLock(Timeout.Infinite); try { if (_items.Keys.Contains(templateId)) { return(_items[templateId]); } } finally { m_lock.ReleaseReaderLock(); } return(null); }
public LockingObject(ReaderWriterLock _lock, AccessMode _lockMode) { readerWriterLock = _lock; accessMode = _lockMode; if (accessMode == AccessMode.Read) { readerWriterLock.AcquireReaderLock(-1); } else { readerWriterLock.AcquireWriterLock(-1); } }
void m_TimerMaintenance_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { if (Interlocked.Exchange(ref m_InMaintenanceTimer, 1) == 1) { return; } try { m_StopPrivilege.AcquireReaderLock(-1); DateTime now = DateTime.Now; if (now.Hour != 3) { return; } string[] logfiles = System.IO.Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory + "log" + Path.DirectorySeparatorChar, "*_log.txt"); foreach (string file in logfiles) { try { DateTime t = System.IO.File.GetCreationTime(file); TimeSpan span = now - t; if (span.TotalDays > 7) { System.IO.File.Delete(file); } ClearNMAlarm(Name, Constants.MO_PROCESS, Constants.TKALM_PROCESSALM, DateTime.Now); } catch (Exception ex) { RaiseNMAlarm(Name, Constants.MO_PROCESS, Constants.TKALM_PROCESSALM, ex.Message, DateTime.Now); SendLog(ex.ToString()); } if (PendingRunFlag == 0) { return; } } } finally { m_StopPrivilege.ReleaseReaderLock(); Interlocked.Exchange(ref m_InMaintenanceTimer, 0); } }
private static void MacroDropSync() { bool syncMacroDrop = true; ServerClient[] serverClients = CenterServer.Instance.GetAllClients(); foreach (ServerClient serverClient in serverClients) { if (!serverClient.NeedSyncMacroDrop) { syncMacroDrop = false; break; } } if (serverClients.Length > 0 && syncMacroDrop) { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.MACRO_DROP); int count = m_DropInfo.Count; pkg.WriteInt(count); m_lock.AcquireReaderLock(Timeout.Infinite); try { foreach (KeyValuePair <int, DropInfo> kvp in m_DropInfo) { DropInfo di = kvp.Value; pkg.WriteInt(di.ID); pkg.WriteInt(di.Count); pkg.WriteInt(di.MaxCount); } } catch (Exception e) { if (log.IsErrorEnabled) { log.Error("DropInfoMgr MacroDropReset", e); } } finally { m_lock.ReleaseReaderLock(); } foreach (ServerClient serverClient in serverClients) { serverClient.NeedSyncMacroDrop = false; serverClient.SendTCP(pkg); } } }
public static FightRateInfo[] GetAllFightRateInfo() { FightRateInfo[] infos = null; m_lock.AcquireReaderLock(Timeout.Infinite); try { infos = _fightRate.Values.ToArray(); } catch { } finally { m_lock.ReleaseReaderLock(); } return(infos == null ? new FightRateInfo[0] : infos); }
public static DailyAwardInfo[] GetAllAwardInfo() { DailyAwardInfo[] infos = null; m_lock.AcquireReaderLock(Timeout.Infinite); try { infos = _dailyAward.Values.ToArray(); } catch { } finally { m_lock.ReleaseReaderLock(); } return(infos == null ? new DailyAwardInfo[0] : infos); }
/// <summary> /// Obtain read access for the given object. /// Throws ApplicationException if access has not been acquired within 30 secs. /// </summary> /// <param name="locker">Locker to acquire rights.</param> public ReaderAutoLocker(ReaderWriterLock locker) { this.wasFreed = false; this.locker = locker; this.wasHeld = true; if (this.locker.IsReaderLockHeld || this.locker.IsWriterLockHeld) { this.wasHeld = false; return ; } locker.AcquireReaderLock(30000); if (! locker.IsReaderLockHeld) throw new ApplicationException("Can't acquire reader rights. CPU is overloaded or deadlock."); }
private ReadLock( ReaderWriterLock syncLock, TimeSpan timeout ) { if( syncLock == null ) throw new ArgumentNullException( "ReaderWriterLock syncLock" ); _rwLock = syncLock; try { syncLock.AcquireReaderLock( timeout ); } catch( ApplicationException ) { _timedOut = true; } }
public IICLockRegion(ReaderWriterLock innerLock, IICLockMode mode, int millisecondTimeout) { _innerLock = innerLock; _lockMode = mode; _msTimeout = millisecondTimeout; switch (mode) { case IICLockMode.ReaderLock: _innerLock.AcquireReaderLock(millisecondTimeout); break; case IICLockMode.WriterLock: _innerLock.AcquireWriterLock(millisecondTimeout); break; default: throw new NotSupportedException("Unexcepted LockMode: " + mode); } }
public static ConsortiaLevelInfo FindConsortiaLevelInfo(int level) { m_lock.AcquireReaderLock(Timeout.Infinite); try { if (_consortiaLevel.ContainsKey(level)) { return(_consortiaLevel[level]); } } catch { } finally { m_lock.ReleaseReaderLock(); } return(null); }
// Update is called once per frame void Update() { Queue <string> post = new Queue <string>(); inLock.AcquireReaderLock(100); while (eventQueue.Count > 0) { post = eventQueue.Dequeue(); gameObject.SendMessage(post.Dequeue(), post.Dequeue()); } while (messages.Count > outText.Count) { messages.Dequeue(); } for (int i = 0; i < messages.Count; ++i) { outText[i].text = messages.ToArray()[i]; } inLock.ReleaseReaderLock(); }
/// <summary> /// Removes all objects in the specified cache context. /// </summary> /// <param name="context">The cache context to clear.</param> /// <returns>False if the context does not exist, true otherwise.</returns> public static bool ClearContext(string context) { bool retval = true; readWriteLock.AcquireReaderLock(MAX_LOCK_WAIT); try { if (caches.ContainsKey(context)) { caches[context].Clear(); } else { retval = false; } } finally { readWriteLock.ReleaseReaderLock(); } return(retval); }
public static IDisposable AsReader(ReaderWriterLock theLock) { theLock.AcquireReaderLock(Timeout.Infinite); return new RWLockWrapper(new DotNetReaderWriterLock(theLock)); }
/// <summary> /// Creates a read lock /// </summary> /// <param name="l"></param> public DisposableReadLock(ReaderWriterLock l) { m_l = l; l.AcquireReaderLock(Timeout.Infinite); }
// Read from Resource: static void ShowNumber(object index) { readerWriterLock.AcquireReaderLock(1000); Console.Write(numbers[(int)index] + " "); readerWriterLock.ReleaseReaderLock(); }
internal /*public*/ ReaderWriterLockResource(ReaderWriterLock theLock, bool writerLock) { _lock = theLock; _writerLock = writerLock; if (_writerLock) { _lock.AcquireWriterLock(Timeout.Infinite); } else { _lock.AcquireReaderLock(Timeout.Infinite); } }
public static void Acquire(out LiteLock liteLock, ReaderWriterLock locker, bool forWrite) { LiteLock theLock = new LiteLock(locker, forWrite); try { } finally { if (forWrite) { locker.AcquireWriterLock(theLock.timeout); } else { locker.AcquireReaderLock(theLock.timeout); } liteLock = theLock; } }
internal virtual RewriteRule FindFirstMatch(HttpApplication app, out string requestUrl, RewriteRuleCollection rules, ReaderWriterLock ruleCollectionLock) { requestUrl = null; RewriteRule matchedRule = null; ruleCollectionLock.AcquireReaderLock(0); try { foreach (var rule in rules) { if ((rule.Rewrite & RewriteOption.Domain) != 0) requestUrl = app.Request.Url.AbsoluteUri; else requestUrl = app.Request.RawUrl; if (rule.IsRewrite(requestUrl)) { matchedRule = rule; break; } } } finally { ruleCollectionLock.ReleaseReaderLock(); } return matchedRule; }
public ReadLockCookie(ReaderWriterLock lck, int timeout) { _mutex = lck; _mutex.AcquireReaderLock(timeout); }
/// <summary> /// Starts a read operation if no write operations are being serviced. /// Otherwise, the write operation is queued. /// /// A successive write operation is queued until all pending read /// operations are considered complete through EndRead(). /// /// A successive read operation is allowed to execute simultaneously. /// </summary> public void StartRead() { RWLock.AcquireReaderLock(30000); }
/// <summary> /// Registers a single local event handler. /// Local event handlers will only be called if the /// "sender" parameter in the Notify method equals /// the object for which a local event handler was /// registered. /// </summary> /// <remarks> /// Certain events will never have a local event handler. /// This happens if the Notify method is called without /// a sender parameter for example! /// </remarks> /// <param name="obj">The object that needs to be the sender of events</param> /// <param name="e">The event type to register for</param> /// <param name="del">The event handler to register for this event type</param> /// <param name="unique">Flag wether event shall be added unique or not</param> /// <exception cref="ArgumentNullException">If one of the parameters is null</exception> private static void AddHandler(object obj, RoadEvent e, RoadEventHandler del, bool unique) { //Test the parameters if (obj == null) { throw new ArgumentNullException("obj", "No object given!"); } if (e == null) { throw new ArgumentNullException("e", "No event type given!"); } if (del == null) { throw new ArgumentNullException("del", "No event handler given!"); } if (!e.IsValidFor(obj)) { throw new ArgumentException("Object is not valid for this event type", "obj"); } try { m_lock.AcquireReaderLock(TIMEOUT); try { RoadEventHandlerCollection col = (RoadEventHandlerCollection)m_GameObjectEventCollections[obj]; if (col == null) { col = new RoadEventHandlerCollection(); LockCookie lc = m_lock.UpgradeToWriterLock(TIMEOUT); try { m_GameObjectEventCollections[obj] = col; } finally { m_lock.DowngradeFromWriterLock(ref lc); } } if (unique) { col.AddHandlerUnique(e, del); } else { col.AddHandler(e, del); } } finally { m_lock.ReleaseReaderLock(); } } catch (ApplicationException ex) { if (log.IsErrorEnabled) { log.Error("Failed to add local event handler!", ex); } } }
public ReadLocker(ref ReaderWriterLock rwl) { mRwl = rwl; mRwl.AcquireReaderLock(Constants.kLockTimoutMs); }
public void TestAcquireLocks () { rwlock = new ReaderWriterLock (); rwlock.AcquireReaderLock (500); rwlock.AcquireReaderLock (500); rwlock.ReleaseReaderLock (); Assert.IsTrue (rwlock.IsReaderLockHeld, "#1"); RunThread (new ThreadStart (AcquireLock_readerWorks)); Assert.IsTrue (rwlock.IsReaderLockHeld); RunThread (new ThreadStart (AcquireLock_writerFails)); rwlock.ReleaseReaderLock (); Assert.IsTrue (!rwlock.IsReaderLockHeld); RunThread (new ThreadStart (AcquireLock_writerWorks)); rwlock.AcquireWriterLock (200); RunThread (new ThreadStart (AcquireLock_writerFails)); RunThread (new ThreadStart (AcquireLock_readerFails)); rwlock.ReleaseWriterLock (); }
public void TestReleaseRestoreReaderLock () { rwlock = new ReaderWriterLock (); rwlock.AcquireReaderLock (500); rwlock.AcquireReaderLock (500); Assert.IsTrue (rwlock.IsReaderLockHeld); LockCookie co = rwlock.ReleaseLock (); RunThread (new ThreadStart (AcquireLock_writerWorks)); rwlock.RestoreLock (ref co); RunThread (new ThreadStart (AcquireLock_writerFails)); rwlock.ReleaseReaderLock (); Assert.IsTrue (rwlock.IsReaderLockHeld); rwlock.ReleaseReaderLock (); Assert.IsTrue (!rwlock.IsReaderLockHeld); }
public ReaderLockDisposer(ReaderWriterLock lock_) { if (null == lock_) { throw new ArgumentNullException("lock_"); } lock_.AcquireReaderLock(LockTimeout); _lock = lock_; }
public void TestUpgradeDowngradeLock () { rwlock = new ReaderWriterLock (); rwlock.AcquireReaderLock (200); rwlock.AcquireReaderLock (200); LockCookie co = rwlock.UpgradeToWriterLock (200); Assert.IsTrue (!rwlock.IsReaderLockHeld); Assert.IsTrue (rwlock.IsWriterLockHeld); RunThread (new ThreadStart (AcquireLock_writerFails)); rwlock.DowngradeFromWriterLock (ref co); Assert.IsTrue (rwlock.IsReaderLockHeld); Assert.IsTrue (!rwlock.IsWriterLockHeld); RunThread (new ThreadStart (AcquireLock_readerWorks)); rwlock.ReleaseReaderLock (); Assert.IsTrue (rwlock.IsReaderLockHeld); rwlock.ReleaseReaderLock (); Assert.IsTrue (!rwlock.IsReaderLockHeld); }
public void ReaderWriter_WhenUpgradedWriteLockReleased_EdgesDeleteFromGraph() { ReaderWriterLock rwl = new ReaderWriterLock(); Barrier barrier = new Barrier(3); Barrier barrier2 = new Barrier(3); Task t1 = new Task(() => { rwl.AcquireReaderLock(Timeout.Infinite); rwl.UpgradeToWriterLock(Timeout.Infinite); rwl.ReleaseWriterLock(); barrier.SignalAndWait(); barrier2.SignalAndWait(); lock (rwl) { Thread.Sleep(100); } }); Task t2 = new Task(() => { barrier.SignalAndWait(); lock (rwl) { barrier2.SignalAndWait(); rwl.AcquireWriterLock(Timeout.Infinite); } }); t1.Start(); t2.Start(); barrier.SignalAndWait(); rwl.AcquireReaderLock(Timeout.Infinite); barrier2.SignalAndWait(); Thread.Sleep(500); rwl.ReleaseReaderLock(); Task.WaitAll(new[] { t1, t2 }); }
public void TestReaderInsideWriter () { // Reader acquires and releases work like the writer equivalent rwlock = new ReaderWriterLock (); rwlock.AcquireWriterLock (-1); rwlock.AcquireReaderLock (-1); Assert.IsTrue (!rwlock.IsReaderLockHeld); Assert.IsTrue (rwlock.IsWriterLockHeld); rwlock.AcquireReaderLock (-1); Assert.IsTrue (!rwlock.IsReaderLockHeld); Assert.IsTrue (rwlock.IsWriterLockHeld); rwlock.ReleaseWriterLock (); Assert.IsTrue (!rwlock.IsReaderLockHeld); Assert.IsTrue (rwlock.IsWriterLockHeld); rwlock.ReleaseReaderLock (); Assert.IsTrue (!rwlock.IsReaderLockHeld); Assert.IsTrue (rwlock.IsWriterLockHeld); rwlock.ReleaseReaderLock (); Assert.IsTrue (!rwlock.IsReaderLockHeld); Assert.IsTrue (!rwlock.IsWriterLockHeld); }
public void ReaderWriter_When2CycleDetected_DoesNotThrows() { ReaderWriterLock rwl = new ReaderWriterLock(); Barrier barrier = new Barrier(2); Action t1 = () => { rwl.AcquireReaderLock(Timeout.Infinite); barrier.SignalAndWait(); rwl.UpgradeToWriterLock(Timeout.Infinite); rwl.ReleaseWriterLock(); }; Action t2 = () => { rwl.AcquireReaderLock(Timeout.Infinite); barrier.SignalAndWait(); Thread.Sleep(500); rwl.ReleaseReaderLock(); }; TestHelpers.InvokeSimultaneouslyAndWait(t1, t2); }
public void TestBug_55911 () { rwlock = new ReaderWriterLock (); rwlock.AcquireReaderLock (Timeout.Infinite); try { LockCookie lc = rwlock.UpgradeToWriterLock (Timeout.Infinite); } finally { rwlock.ReleaseReaderLock(); } rwlock.AcquireReaderLock (Timeout.Infinite); try { LockCookie lc = rwlock.UpgradeToWriterLock (Timeout.Infinite); } finally { rwlock.ReleaseReaderLock(); } }
// public static ItemTemplateInfo Fusion(List <ItemInfo> Items, List <ItemInfo> AppendItems, ItemInfo Formul, ref bool isBind, ref bool result) { List <int> list = new List <int>(); int MaxLevel = 0; int TotalRate = 0; //int BindType = 0; ItemTemplateInfo returnItem = null; foreach (ItemInfo p in Items) { list.Add(p.Template.FusionType); if (p.Template.Level > MaxLevel) { MaxLevel = p.Template.Level; } TotalRate += p.Template.FusionRate; if (p.IsBinds) { isBind = true; } } if (Formul.IsBinds) { isBind = true; } foreach (ItemInfo p in AppendItems) { TotalRate += p.Template.FusionRate / 2; if (p.IsBinds) { isBind = true; } } list.Sort(); StringBuilder itemString = new StringBuilder(); foreach (int i in list) { itemString.Append(i); } itemString.Append(Formul.TemplateID); string key = itemString.ToString(); m_lock.AcquireReaderLock(Timeout.Infinite); try { if (_fusions.ContainsKey(key)) { FusionInfo info = _fusions[key]; double rateMax = 0; double rateMin = 0; ItemTemplateInfo temp_0 = Bussiness.Managers.ItemMgr.GetGoodsbyFusionTypeandLevel(info.Reward, MaxLevel); ItemTemplateInfo temp_1 = Bussiness.Managers.ItemMgr.GetGoodsbyFusionTypeandLevel(info.Reward, MaxLevel + 1); ItemTemplateInfo temp_2 = Bussiness.Managers.ItemMgr.GetGoodsbyFusionTypeandLevel(info.Reward, MaxLevel + 2); List <ItemTemplateInfo> temps = new List <ItemTemplateInfo>(); if (temp_2 != null) { temps.Add(temp_2); } if (temp_1 != null) { temps.Add(temp_1); } if (temp_0 != null) { temps.Add(temp_0); } ItemTemplateInfo tempMax = temps.Where(s => (TotalRate / (double)s.FusionNeedRate) <= 1.1).OrderByDescending(s => (TotalRate / (double)s.FusionNeedRate)).FirstOrDefault(); ItemTemplateInfo tempMin = temps.Where(s => (TotalRate / (double)s.FusionNeedRate) > 1.1).OrderBy(s => (TotalRate / (double)s.FusionNeedRate)).FirstOrDefault(); if ((tempMax != null) && (tempMin == null)) { returnItem = tempMax; result = true; } if ((tempMax != null) && (tempMin != null)) { if (tempMax.Level - tempMin.Level == 2) { rateMax = 100 * TotalRate * 0.6 / (double)tempMax.FusionNeedRate; rateMin = 100 - rateMax; } else { rateMax = 100 * TotalRate / (double)tempMax.FusionNeedRate; rateMin = 100 - rateMax; } if (100 * TotalRate / (double)tempMax.FusionNeedRate > rand.Next(100)) { returnItem = tempMax; result = true; } else { returnItem = tempMin; result = true; } } if ((tempMax == null) && (tempMin != null)) { returnItem = tempMin; result = true; } if (result) { foreach (ItemInfo p in Items) { if (p.Template.TemplateID == returnItem.TemplateID) { result = false; break; } } } return(returnItem); } } catch { } finally { m_lock.ReleaseReaderLock(); } return(null); }
public void TestBug_55909 () { rwlock = new ReaderWriterLock (); ThreadRunner tr = StartThread (new ThreadStart(Bug_55909_Thread2)); Thread.Sleep (200); rwlock.AcquireReaderLock (Timeout.Infinite); try { LockCookie lc = rwlock.UpgradeToWriterLock (Timeout.Infinite); Thread.Sleep (500); } finally { rwlock.ReleaseReaderLock(); } tr.Join (); }
public void DoSth9() { myReaderWriterLock.AcquireReaderLock(1000); myReaderWriterLock.ReleaseReaderLock(); }
public void DowngradeTest () { LockCookie lc1, lc2, lc3, lc4; rwlock = new ReaderWriterLock (); rwlock.AcquireReaderLock (Timeout.Infinite); lc1 = rwlock.UpgradeToWriterLock (Timeout.Infinite); rwlock.AcquireReaderLock (Timeout.Infinite); lc2 = rwlock.UpgradeToWriterLock (Timeout.Infinite); rwlock.AcquireReaderLock (Timeout.Infinite); lc3 = rwlock.UpgradeToWriterLock (Timeout.Infinite); rwlock.AcquireReaderLock (Timeout.Infinite); lc4 = rwlock.UpgradeToWriterLock (Timeout.Infinite); rwlock.DowngradeFromWriterLock (ref lc2); Assert.IsFalse (rwlock.IsReaderLockHeld, "A1"); Assert.IsTrue (rwlock.IsWriterLockHeld, "A2"); rwlock.ReleaseReaderLock (); Assert.IsFalse (rwlock.IsReaderLockHeld, "B1"); Assert.IsTrue (rwlock.IsWriterLockHeld, "B2"); rwlock.DowngradeFromWriterLock (ref lc4); Assert.IsFalse (rwlock.IsReaderLockHeld, "C1"); Assert.IsTrue (rwlock.IsWriterLockHeld, "C2"); rwlock.ReleaseReaderLock (); Assert.IsFalse (rwlock.IsReaderLockHeld, "D1"); Assert.IsTrue (rwlock.IsWriterLockHeld, "D2"); rwlock.DowngradeFromWriterLock (ref lc3); Assert.IsFalse (rwlock.IsReaderLockHeld, "E1"); Assert.IsTrue (rwlock.IsWriterLockHeld, "E2"); rwlock.ReleaseReaderLock (); Assert.IsFalse (rwlock.IsReaderLockHeld, "F1"); Assert.IsTrue (rwlock.IsWriterLockHeld, "F2"); rwlock.DowngradeFromWriterLock (ref lc1); Assert.IsTrue (rwlock.IsReaderLockHeld, "G1"); Assert.IsFalse (rwlock.IsWriterLockHeld, "G2"); rwlock.ReleaseReaderLock (); Assert.IsFalse (rwlock.IsReaderLockHeld, "H1"); Assert.IsFalse (rwlock.IsWriterLockHeld, "H2"); }
public void TestReaderInsideWriter () { // Reader acquires and releases work like the writer equivalent rwlock = new ReaderWriterLock (); rwlock.AcquireWriterLock (-1); rwlock.AcquireReaderLock (-1); Assert ("u1", !rwlock.IsReaderLockHeld); Assert ("u2", rwlock.IsWriterLockHeld); rwlock.AcquireReaderLock (-1); Assert ("u3", !rwlock.IsReaderLockHeld); Assert ("u4", rwlock.IsWriterLockHeld); rwlock.ReleaseWriterLock (); Assert ("u5", !rwlock.IsReaderLockHeld); Assert ("u6", rwlock.IsWriterLockHeld); rwlock.ReleaseReaderLock (); Assert ("u7", !rwlock.IsReaderLockHeld); Assert ("u8", rwlock.IsWriterLockHeld); rwlock.ReleaseReaderLock (); Assert ("u9", !rwlock.IsReaderLockHeld); Assert ("u10", !rwlock.IsWriterLockHeld); }
internal ReaderLock(ReaderWriterLock readerWriterLock) { this.readerWriterLock = readerWriterLock; readerWriterLock.AcquireReaderLock(Timeout.Infinite); }
public static IDisposable AcquireReaderLock(ReaderWriterLock rwl) { rwl.AcquireReaderLock(Timeout.Infinite); return new Disposer(() => rwl.ReleaseReaderLock()); }
//获取告警字符串 public string GetAlarmString() { try { SyncRoot.AcquireReaderLock(-1); System.Text.StringBuilder alarmstring = new System.Text.StringBuilder(); alarmstring.Append("<++++>\r\n"); alarmstring.Append("COMMAND = ADAPTER_ALARM_REPORT\r\n"); alarmstring.Append("集中告警流水号 = "); alarmstring.Append(TKSn); alarmstring.Append("\r\n"); alarmstring.Append("厂商告警流水号 = "); alarmstring.Append(ManuSn); alarmstring.Append("\r\n"); alarmstring.Append("告警城市 = "); alarmstring.Append(City); alarmstring.Append("\r\n"); alarmstring.Append("设备厂商 = "); alarmstring.Append(Manufacturer); alarmstring.Append("\r\n"); alarmstring.Append("业务类型 = "); alarmstring.Append(BusinessType); alarmstring.Append("\r\n"); alarmstring.Append("网元名称 = "); alarmstring.Append(NeName); alarmstring.Append("\r\n"); alarmstring.Append("网元类型 = "); alarmstring.Append(NeType); alarmstring.Append("\r\n"); alarmstring.Append("对象名称 = "); alarmstring.Append(ObjName); alarmstring.Append("\r\n"); alarmstring.Append("对象类型 = "); alarmstring.Append(ObjType); alarmstring.Append("\r\n"); alarmstring.Append("告警名称 = "); alarmstring.Append(AlarmName); alarmstring.Append("\r\n"); alarmstring.Append("重定义告警名称 = "); alarmstring.Append(Redefinition); alarmstring.Append("\r\n"); //alarmstring.Append("告警种类 = "); //alarmstring.Append(Category); //alarmstring.Append("\r\n"); alarmstring.Append("告警级别 = "); alarmstring.Append(Severity); alarmstring.Append("\r\n"); alarmstring.Append("告警发生时间 = "); alarmstring.Append(OccurTime); alarmstring.Append("\r\n"); alarmstring.Append("告警确认时间LV1 = "); alarmstring.Append(AckTimeLV1); alarmstring.Append("\r\n"); alarmstring.Append("再次确认时间LV1 = "); alarmstring.Append(AckAgainTimeLV1); alarmstring.Append("\r\n"); alarmstring.Append("告警确认时间LV2 = "); alarmstring.Append(AckTimeLV2); alarmstring.Append("\r\n"); alarmstring.Append("再次确认时间LV2 = "); alarmstring.Append(AckAgainTimeLV2); alarmstring.Append("\r\n"); alarmstring.Append("告警恢复时间 = "); alarmstring.Append(ClearTime); alarmstring.Append("\r\n"); alarmstring.Append("告警定位信息 = "); alarmstring.Append(Location); alarmstring.Append("\r\n"); alarmstring.Append("操作员信息LV11 = "); alarmstring.Append(OperatorLV11); alarmstring.Append("\r\n"); alarmstring.Append("操作员信息LV12 = "); alarmstring.Append(OperatorLV12); alarmstring.Append("\r\n"); alarmstring.Append("操作员信息LV21 = "); alarmstring.Append(OperatorLV21); alarmstring.Append("\r\n"); alarmstring.Append("操作员信息LV22 = "); alarmstring.Append(OperatorLV22); alarmstring.Append("\r\n"); alarmstring.Append("工程上报信息 = "); alarmstring.Append(ProjectInfo); alarmstring.Append("\r\n"); alarmstring.Append("工程超时 = "); alarmstring.Append(ProjectBool); alarmstring.Append("\r\n"); alarmstring.Append("派单人LV1 = "); alarmstring.Append(OrderOperatorLV1); alarmstring.Append("\r\n"); alarmstring.Append("派单号LV1 = "); alarmstring.Append(OrderIDLV1); alarmstring.Append("\r\n"); alarmstring.Append("派单时间LV1 = "); alarmstring.Append(OrderTimeLV1); alarmstring.Append("\r\n"); alarmstring.Append("派单人LV2 = "); alarmstring.Append(OrderOperatorLV2); alarmstring.Append("\r\n"); alarmstring.Append("派单号LV2 = "); alarmstring.Append(OrderIDLV2); alarmstring.Append("\r\n"); alarmstring.Append("派单时间LV2 = "); alarmstring.Append(OrderTimeLV2); alarmstring.Append("\r\n"); alarmstring.Append("OMCName = "); alarmstring.Append(OMCName); alarmstring.Append("\r\n"); alarmstring.Append("Reserved2 = "); alarmstring.Append(Reserved2); alarmstring.Append("\r\n"); alarmstring.Append("Reserved3 = "); alarmstring.Append(Reserved3); alarmstring.Append("\r\n"); alarmstring.Append("接收时间 = "); alarmstring.Append(ReceiveTime); alarmstring.Append("\r\n"); alarmstring.Append("<---->\r\n"); return(alarmstring.ToString()); } finally { SyncRoot.ReleaseReaderLock(); } }
public ReaderLock(ReaderWriterLock rwLock, int millisecondsTimeout) { this.rwLock = rwLock; rwLock.AcquireReaderLock(millisecondsTimeout); }
public ReaderLock(ReaderWriterLock @lock) { _lock = @lock; _lock.AcquireReaderLock(Timeout.Infinite); }