異步操做與鎖

互斥鎖(lock)併發

lock 關鍵字將語句塊標記爲臨界區,方法是獲取給定對象的互斥鎖,執行語句,而後釋放該鎖。當任何一個線程獲取到鎖後,其餘線程若是須要使用該臨界區內代碼,則必須等待前一個線程使用完畢後釋放鎖。性能

Object thisLock = new Object();
lock (thisLock)
{
    // 臨界區代碼塊
}

讀寫鎖(ReadWriteLock)ui

 

ReadWriteLock定義支持單個寫線程和多個讀線程的鎖。該鎖的做用主要是解決併發讀的性能問題,使用該鎖,能夠大大提升數據併發訪問的性能,只有在寫時,纔會阻塞全部的讀鎖。this

//使用一個 System.Int32 超時值獲取讀線程鎖。
                _rwlock.AcquireReaderLock(100);
                try
                {
                    if (list.Count > 0)
                    {
                        int result = list[list.Count - 1];
                    }
                }
                finally
                {
                    //減小鎖計數,釋放鎖
                    _rwlock.ReleaseReaderLock();
                }
//使用一個 System.Int32 超時值獲取寫線程鎖。
                _rwlock.AcquireWriterLock(100);
                try
                {
                    list.Add(WriteCount++);
                }
                finally
                {
                    //減小寫線程鎖上的鎖計數,釋放寫鎖
                    _rwlock.ReleaseWriterLock();
                }
相關文章
相關標籤/搜索