std::lock_guard 与 std::unique_lock 对 mutex 进行自动加解锁。
mutex m; void fun() { unique_lock<mutex> mlock(m); } unique_lock mlock(m); 线程没有 m 的所有权,根据块语句的循环实现自动加解锁。 线程根据 m 属性,来判断是否可以加锁、解锁。
void fun() { lock_guard<mutex> mlock(m); } lock_guard mlock(m); 线程拥有 m 的所有权,实现自动加解锁。 线程读取 m 失败时,则一直等待,直到读取成功。 线程会把 m 一直占有,直到当前线程完成才释放,其它线程才能访问。