线程安全----互斥锁和原子变量的效率比较

多线程访问共享资源的时候需要对线程进行互斥同步操作,在C++中可以选择原子变量和C++11中的mutex互斥量对象来进行互斥操作,该文章简单对两种同步操作进行一个效率的比较。

工具:VS2017

环境:WINDOW7  8核CPU

首先选择mutex

代码如下:

#include 
#include 
#include
using namespace std;
int num;
mutex m;//互斥锁
void run()
{

	for (int i = 0; i < 1000000; ++i)
	{	
		m.lock();
		num++;
		m.unlock();
	}
}

int main() 
{
	clock_t begin = clock();
	thread t1(run);
	thread t2(run);
	t1.join();
	t2.join();
	clock_t end = clock();
	cout << num << endl;
	cout << end - begin << "ms"<

运行结果图:

线程安全----互斥锁和原子变量的效率比较_第1张图片


然后选择原子变量:

代码如下

#include 
#include 
#include
#include
using namespace std;
//int num;
//mutex m;//互斥锁
atomic_int num;
void run()
{

	for (int i = 0; i < 1000000; ++i)
	{	
		//m.lock();
		num++;
		//m.unlock();
	}
}

int main() 
{
	clock_t begin = clock();
	thread t1(run);
	thread t2(run);
	t1.join();
	t2.join();
	clock_t end = clock();
	cout << num << endl;
	cout << end - begin << "ms"<

运行结果:

线程安全----互斥锁和原子变量的效率比较_第2张图片

你可能感兴趣的:(线程安全----互斥锁和原子变量的效率比较)