1. 程式人生 > >C++異常和以RAII方式封裝鎖

C++異常和以RAII方式封裝鎖

在多執行緒程式設計中,我們應該使用“獲得資源時即初始化”RAII(resource acquisition is initialization)。簡單說來就是在建構函式中統一分配資源,在解構函式中統一回收資源。

{
    Lock<vector<int>> lock(v);
    ...
}

這種方式有諸多好處,除了使程式碼更加簡潔之外,也是異常安全的。

C++保證,如果有異常被丟擲,區域性物件會被析構,所以,即便在我們使用Lock物件的過程中有異常丟擲,Lock仍然會釋放它所擁有的互斥變數(因為它是區域性變數)。而如果我們在程式碼中手工呼叫getMutex和releaseMutex,那麼,在get和release之間發生了異常,我們永遠無法釋放互斥變數。