Thread lock_guard 和 unique_lock

来源:互联网 发布:域名到期如何续费 编辑:程序博客网 时间:2024/06/06 01:54
#include "stdafx.h"#include <iostream>#include <mutex>#include <thread>int i;std::mutex i_mutex;struct Box {explicit Box(int num) : num_things{ num } {}int num_things;std::mutex m;};void safe_increment(){std::lock_guard<std::mutex> lock(i_mutex);//加锁,一次只允许一条线程执行//std::unique_lock<std::mutex> lock(i_mutex, std::defer_lock);//lock.lock();std::cout << i << "\n";for (int j = 0; j < 100;++j)++i;}void funcUniqueLock(Box& b){std::unique_lock<std::mutex> lock(b.m,std::defer_lock);lock.lock();b.num_things++;std::cout << b.num_things << "\n";}int _tmain(int argc, _TCHAR* argv[]){// std::thread t1(safe_increment);// std::thread t2(safe_increment);// std::thread t3(safe_increment);// std::thread t4(safe_increment);Box b(1);std::thread t1(funcUniqueLock,std::ref(b));std::thread t2(funcUniqueLock,std::ref(b));std::thread t3(funcUniqueLock,std::ref(b));std::thread t4(funcUniqueLock,std::ref(b));b.num_things = 10;t1.join();t2.join();t3.join();t4.join();return 0;}

感觉lock_guid 和unique_lock差不多,为什么网上例子的unique_lock用对象锁 不用全局锁。

0 0