#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用对象锁 不用全局锁。