线程冲突与解决
来源:互联网 发布:上网行为监管软件 编辑:程序博客网 时间: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
- 线程冲突与解决
- 线程之间的冲突解决
- 线程6:互斥量,解决线程冲突
- SVN冲突原因与冲突解决
- 待解决的问题 线程冲突!
- C++,多线程:原子操作解决线程冲突
- 解决金山词霸与卡巴斯基冲突
- XFire与Spring冲突解决
- 解决ActiveSync与GPRS冲突
- vs2005 与 vmware冲突解决
- jQuery 与prototype冲突解决
- 解决readonly与退格键冲突
- 解决ViewPager与HorizontalScrollView 冲突
- ScrollView与ListView冲突解决
- scrollView与ListView 冲突解决
- ScrollView与ListView冲突解决
- git解决冲突与merge
- 解决ECShop与jQuery冲突
- 初始创建springmvc_mybatis1208控制台报错
- vc中 'strcasecmp' : undeclared identifier
- mysql主从复制
- webpack gulp 实现完整前端工程化
- 仿 boss 直聘,查看用户头像
- 线程冲突与解决
- Log4J日志配置详解
- 闭包的理解
- bootstrap的内置按钮样式
- C++,java,Python的内部实现sort怎么实现的,有什么不同?
- VC/MFC图标菜单(菜单图标)的实现
- Linux学习日记--fork()函数笔记
- stock
- 偏移视觉效果的无限轮播