template<class Mutex> class lock_guard;
lock_guard
是一个一直使互斥量锁定的管理锁对象;
在构建阶段,互斥量被调用线程锁定,在析构阶段,锁unlocked
lock_guard是最简单的锁,对具有自动持续时间的对象特别有用,该i持续时间能一直持续到上下文结束;
#include <iostream>
#include <mutex>
#include <thread>
#include <stdexcept>
using namespace std;
mutex mtx;
void PrintEven(int x) {
if (x % 2 == 0) {
cout<< x<< " is even"<<endl;
} else {
throw(logic_error("not even"));
}
}
void PrintThreadId(int x) {
try {
//using local lock_guard to lock mtx
//guarantees unlocking on destruction/exception
lock_guard<mutex> lck(mtx);
PrintEven(x);
} catch (logic_error&) {
cout<<" exception caught."<<endl;
}
}
int main(void) {
thread threads[10];
for (int i = 0; i < 10; ++i) {
threads[i] = thread(PrintThreadId, i + 1);
}
for (auto& t : threads) {
t.join();
}
return 0;
}