boost死鎖相關問題

2021-10-25 00:01:28 字數 1253 閱讀 5097

◆ 讀寫鎖的實現

typedef boost::shared_lockreadlock;

typedef boost:: unique_lockwritelock;

boost::shared_mutex rwmutex;

void readonly( )

void writeonly( )

對同乙個rwmutex,執行緒可以同時有多個readlock,這些readlock會阻塞任意乙個企圖獲得writelock的執行緒,直到所有的readlock物件都析構。如果writelock首先獲得了rwmutex,那麼它會阻塞任意乙個企圖在rwmutex上獲得readlock或者writelock的執行緒。

▼遞迴式的互斥量

boost::recursive_mutex提供乙個遞迴式的互斥量。對於乙個例項最多允許乙個執行緒擁有其鎖定,如果乙個執行緒已經鎖定乙個boost::recursive_mutex例項,那麼這個執行緒可以多次鎖定這個例項。

lock_guard只能像上面這樣使用,而unique_lock允許設定超時,推遲鎖定lock以及在物件銷毀之前unlock。

boost::unique_locklk( m );

process( data );

lk.unlock( );

// do other thing

★設定鎖超時

boost::unique_lockboost::timed_mutex lk( m, std::chrono::milliseconds(3) ); // 超時3秒

if( lk ) process( data );

◆ upgrade_lock類

什麼是upgrade_lock,它的最大特點就是與shared_lock不互斥,與別的upgrade_lock和unique_lock互斥。也就是說執行緒a獲得mutex的upgrade_lock後,執行緒b、c等還可以獲得mutex的share_mutex,反之亦然。

不僅限於可鎖定對提供的獨佔鎖定,還支援可公升級鎖定。

boost::shared_mutex m_mutex;

void test()

int main()

....................................

}

由於main中已經獲取了鎖,在執行test()的時候想再次獲取讀鎖,需要等待main中寫鎖釋放。但是寫鎖不會釋放,test中的讀鎖會一直等待。

死鎖相關問題分析

1 死鎖定義 死鎖是程序死鎖的簡稱,是兩個或兩個以上程序無限期地等待永遠都不會發生的條件,系統處於停滯狀態。注 死鎖不僅可發生在硬體資源上,由於設計不當,也有可能發生在軟體資源的使用上。2 產生死鎖的必要條件 在系統中,如果以下4個問題同時成立,死鎖就會發生 1 互斥條件 必須有乙個資源以非共享的方...

死鎖相關知識的學習

一組程序中,每個程序都無限等待被改組程序中另乙個程序所占有的資源,因而永遠無法得到的資源,這種現象稱為程序死鎖,這一組程序就稱為死鎖程序。如果死鎖發生,會浪費大量系統資源,甚至導致系統崩潰。需要注意 1.資源數量有限 鎖和訊號量錯誤使用 1.1資源的使用方式 申請 分配 使用 釋放 模式 可消耗資源...

死鎖及相關問題

系統中的資源可以分為兩類,一類是可剝奪資源,是指某程序在獲得這類資源後,該資源可以再被其他程序或系統剝奪。cpu和主存均屬於可剝奪性資源。另一類資源是不可剝奪資源,當系統把這類資源分配給某程序後,再不能強行收回,只能在程序用完後自行釋放,如磁帶機 印表機等。死鎖是指兩個或兩個以上的程序在執行過程中,...