ReleaseLock() public method

public ReleaseLock ( ) : LockCookie
return LockCookie
Esempio n. 1
0
        virtual public void Stop()
        {
            lock (this)
            {
                if (Interlocked.Read(ref m_Run) == 0)
                {
                    return;
                }

                if (Interlocked.Exchange(ref m_PendingRun, 0) == 0)
                {
                    return;
                }

                SendLog("正在关闭" + Name + "告警适配器...");

                _PreStopStage();

                AdapterStateReport(AdapterStatus.Stop, null);

                if (!AdapterLogout())
                {
                    SendLog("从告警服务器注销失败, 服务器中信息可能不正确.");
                }

                try
                {
                    if (m_CommClient != null)
                    {
                        m_CommClient.onConnectionBroken -= new ClientConnectionBrokenHandler(DBAdapterBase_onConnectionBroken);
                        m_CommClient.Close();
                    }
                }
                catch { }

                m_TimerMaintenance.Stop();

                _PostStopStage();

                try
                {
                    m_StopPrivilege.AcquireWriterLock(-1);
                }
                finally
                {
                    m_StopPrivilege.ReleaseLock();
                }

                Interlocked.Exchange(ref m_Run, 0);

                SendLog(Name + "告警适配器已结束.");
            }
        }
Esempio n. 2
0
		public void TestReleaseRestoreWriterLock ()
		{
			rwlock = new ReaderWriterLock ();
			rwlock.AcquireWriterLock (500);
			rwlock.AcquireWriterLock (500);
			Assert.IsTrue (rwlock.IsWriterLockHeld);
			
			LockCookie co = rwlock.ReleaseLock ();
			RunThread (new ThreadStart (AcquireLock_readerWorks));
			
			rwlock.RestoreLock (ref co);
			RunThread (new ThreadStart (AcquireLock_readerFails));
			
			rwlock.ReleaseWriterLock ();
			Assert.IsTrue (rwlock.IsWriterLockHeld);
			rwlock.ReleaseWriterLock ();
			Assert.IsTrue (!rwlock.IsWriterLockHeld);
		}
		public void TestReleaseRestoreReaderLock ()
		{
			rwlock = new ReaderWriterLock ();
			rwlock.AcquireReaderLock (500);
			rwlock.AcquireReaderLock (500);
			Assert ("r1", rwlock.IsReaderLockHeld);
			
			LockCookie co = rwlock.ReleaseLock ();
			RunThread (new ThreadStart (AcquireLock_writerWorks));
			
			rwlock.RestoreLock (ref co);
			RunThread (new ThreadStart (AcquireLock_writerFails));
			
			rwlock.ReleaseReaderLock ();
			Assert ("r2", rwlock.IsReaderLockHeld);
			rwlock.ReleaseReaderLock ();
			Assert ("r3", !rwlock.IsReaderLockHeld);
		}