线程冲突与解决

来源:互联网 发布:上网行为监管软件 编辑:程序博客网 时间:2024/05/22 04:34

C++中解决线程冲突的二种方式:

一:互斥锁 mutex  要引用 mutex 头文件

二:元子变量 atomic 在头文件 atomic 

代码如下:

/*全局:变量,冲突,结果不正确,速度快。mutex:结果正确,速度慢。atomic:结果正确,速度比mutex快。*/#include<iostream>#include<thread>#include<mutex>//线程互斥量,解决线程安全#include<atomic>//原子变量,解决线程安全#include<Windows.h>using namespace std;//测试线程安全,多线程访问就会发生线程冲突。//int num = 0;////void run()//{//for (int i = 0; i < 100000; i++)//{//num++;//}//}//:二互斥锁解决线程安全//int num = 0;//mutex m;  //加锁、解锁花费时间。//void run1()//{//m.lock();//for (int i = 0; i < 100000; i++)//{////互斥锁放在循环里,效率底。////m.lock();//num++;////m.unlock();//}//m.unlock();//}//三:元子量解决线程安全//注意这儿初始化用的是大括号atomic_int num{ 0 };//创建一个元子变量void run2(){for (int i = 0; i < 100000; i++){num++;}}void main(){clock_t start = clock();thread t1(run2);thread t2(run2);t1.join();t2.join(); //等待t1,t2线程运行完成。//发现结果不对,这就是多线程冲突。cout << num << endl;clock_t end = clock();cout << end - start << endl;cin.get();}


0 0
原创粉丝点击