很好的設計 鎖的自動使用和釋放

2021-06-19 18:39:01 字數 569 閱讀 4967

多執行緒下,常常會使用互斥鎖或者讀寫鎖來確保臨界區的正確使用。

pthread_mutex_lock(&mutex);

//using critical section

pthread_mutex_unlock(&mutex);

如果在使用臨界區期間發生異常返回,導致鎖沒有釋放。為了防止這種現象發生,我們通常要在每個return之前都要釋放鎖,增加**量、影響美觀,而且有忘記的隱患。期望一種能夠在不使用時自動釋放的鎖,這就讓我們想到類的自動析構。

#include class mutexlock 

~mutexlock()

private:

pthread_mutex_t* ptr;

};

如此類似的可以封裝讀寫鎖。使用的時候只需構造改封裝類即可,在使用的時候,可以盡量減小鎖的作用域。

pthread_mutex_t mutex;

//do something

//do something

關於鎖的自動釋放

這種方案一直在用,但是一直沒能領會到它的意圖,也是在乙個面試過程中,被問到乙個此類問題,從而才想到的。問題 當在乙個函式中使用鎖時,如果加鎖後由於某種原因 疏忽,異常等 沒有釋放鎖就直接退出了,那麼將導致鎖的狀態錯誤,怎樣解決這個問題?1 沒有正常釋放鎖 就像下面的程式一樣 這裡僅作為示例,選用mu...

物件的notify方法的含義和物件鎖釋放的三種情況

1,notify的含義 1 notify一次只隨機通知乙個執行緒進行喚醒 2 在執行了notify方法之後,當前執行緒不會馬上釋放該物件鎖,呈wait狀態的執行緒也不能馬上獲得該物件鎖,要等到執行notify方法的執行緒將程式執行完 也就是退出sychronized 塊後,當前執行緒才會釋放鎖,而呈...

6 異常釋放鎖的情況

異常釋放鎖的情況對於web程式,異常的釋放鎖,很可能意味著程式出現了錯誤,業務邏輯產生了錯誤的結果導致了嚴重的錯誤,比如 乙個佇列10個任務,很多物件都會去等待第1個佇列正常秩序產生的結果返回再次釋放鎖,那麼其中乙個發生了異常,導致業務沒執行完畢,就釋放鎖的資源。package demo1 crea...