线程自动加锁与自动解锁:lock_guard & unique_lock

#define N 1000000
mutex g_mutex;
void add(int *p)
{
	for (int i = 0; i < N; i++)
	{
		unique_lockulk(g_mutex);//OK   unique_lock 加锁,没有mutex所有的权限(根据mutex的属性来判断是否能够加锁, 自动加锁自动解锁)    时间上比lock_guard 慢

		//根据块语句的循环 来锁定    读取失败就一直等待
		//lock_guard < mutex >lgd(g_mutex) ;//OK    锁定的向导   拥有mutex所有的权限  自动加锁自动解锁(浪费时间)   一旦读取失败,就一直等待
		(*p)++;
	}
}
void main()
{
	int a = 0;
	thread t1(add, &a);
	thread t2(add, &a);
	t1.join();
	t2.join();
	cout << a << endl;
	cin.get();
}

你可能感兴趣的:(线程自动加锁与自动解锁:lock_guard & unique_lock)