lock_guard可以簡化lock/unlock的寫法,同時也更安全,因為lock_guard在構造時會自動鎖定互斥量,而在退出作用域后進行析構會自動解鎖,從而保證了互斥量的正確操作,避免忘記unlock操作,因此,應盡量用lock_guard。lock_guard用到了RAII技術,這種技術在類的構造函數中分配資源,在析構函數中釋放資源,保證了資源在出了作用域之后就釋放。
#include <iostream> #include <string> #include <condition_variable> #include <mutex> void IncreaseWithLockGuard(int *value,std::mutex *m3x){ for (int i = 0; i < 10000; ++i) { std::lock_guard<std::mutex> lock(*m3x); *value+=1; } } void IncreaseWIthLockUnlock(int *value,std::mutex *m3x){ for (int i = 0; i < 10000; ++i) { m3x->lock(); *value+=1; m3x->unlock(); } } int main(int argc, char *argv[]) { mutex m3x; int value = 0; thread th0(IncreaseWithLockGuard,&value,&m3x); thread th1(IncreaseWithLockGuard,&value,&m3x); th0.join(); th1.join(); cout << "value:" << value << endl; return 0; }