System.Threading.ReaderWriterLock.ReleaseLock C# (CSharp) Method

ReleaseLock() public method

public ReleaseLock ( ) : LockCookie
return LockCookie
        public LockCookie ReleaseLock()
        {
            var lockCookie = new LockCookie();
            int threadID = GetCurrentThreadID();
            lockCookie._threadID = threadID;

            if (_writerID == threadID)
            {
                // Save lock state in the cookie
                lockCookie._flags = LockCookieFlags.Release | LockCookieFlags.OwnedWriter;
                lockCookie._writerLevel = _writerLevel;

                // Release the writer lock
                _writerLevel = 1;
                ReleaseWriterLock();
                return lockCookie;
            }

            ThreadLocalLockEntry threadLocalLockEntry = ThreadLocalLockEntry.GetCurrent(_lockID);
            if (threadLocalLockEntry == null)
            {
                lockCookie._flags = LockCookieFlags.Release | LockCookieFlags.OwnedNone;
                return lockCookie;
            }

            Debug.Assert((_state & LockStates.ReadersMask) != 0);
            Debug.Assert(threadLocalLockEntry._readerLevel > 0);

            // Save lock state in the cookie
            lockCookie._flags = LockCookieFlags.Release | LockCookieFlags.OwnedReader;
            lockCookie._readerLevel = threadLocalLockEntry._readerLevel;

            // Release the reader lock
            threadLocalLockEntry._readerLevel = 1;
            ReleaseReaderLock();
            return lockCookie;
        }

Usage Example

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 + "告警适配器已结束.");
            }
        }
All Usage Examples Of System.Threading.ReaderWriterLock::ReleaseLock