windows 线程同步学习测试-1
2015-05-31 12:18
330 查看
环境win7旗舰64位系统,vs2013,AMD fx™4100 Auad-core processor ,8G内存,
看《windows核心编程》线程同步一章,看到有说g_x++会不同步的问题,试着写些代码加深印象。发现+1太快了,看不出效果,于是for循环了1亿次。代码如下:
运行效果部分复制如下:
103142316
103378991
114315655
113482883
112601936
103115533
104226349
116483624
118944471
117040062
117731078
104095516
113767825
108898288
114825927
102189580
98102943
114165950
113351409
114693549
103554014
103167647
113206459
103698422
结果甚至有小于1亿的。
看《windows核心编程》线程同步一章,看到有说g_x++会不同步的问题,试着写些代码加深印象。发现+1太快了,看不出效果,于是for循环了1亿次。代码如下:
#include "stdafx.h" using std::cout; using std::endl; using std::cin; unsigned __stdcall ThreadFunRun(void * paData)//vs默认是__cdecl 调用 { int *iData = (int*)paData; for (int index = 0; index < 100000000; ++index) { (*iData)++; } //cout <<"线程函数中"<< *iData << endl; return 0; } using std::vector; vector<HANDLE> createThread(int &ivalue) { vector<HANDLE> vecH; const int iThrCount = 2; for (int index = 0; index < iThrCount; ++index) { HANDLE hpt1 = (HANDLE)_beginthreadex( NULL,//SECURITY_ATTRIBUTES 0,//cbStackSize ThreadFunRun, &ivalue, 0, NULL ); vecH.push_back(hpt1); } return vecH; } bool waitForRun(vector<HANDLE> & hs) { for (int index = 0; index < hs.size(); ++index) { DWORD dwaitRes = WaitForSingleObject(hs[index], INFINITE); if (dwaitRes !=WAIT_FAILED) { CloseHandle(hs[index]); } else { cout << "等待时出错,出错ID:" << GetLastError() << endl; for (; index < hs.size();++index) { CloseHandle(hs[index]); } return false; } } return true; } int _tmain(int argc, _TCHAR* argv[]) { const int icount = 50; for (int index = 0; index < icount; ++index) { int ivCalc = 0; vector<HANDLE> hsGet = createThread(ivCalc); // Sleep(60); // cout << ivCalc << endl; if (waitForRun(hsGet)) cout << ivCalc << endl; else cout<<"第 "<<index << " 次等待线程结束出错" << endl; } return 0; }
运行效果部分复制如下:
103142316
103378991
114315655
113482883
112601936
103115533
104226349
116483624
118944471
117040062
117731078
104095516
113767825
108898288
114825927
102189580
98102943
114165950
113351409
114693549
103554014
103167647
113206459
103698422
结果甚至有小于1亿的。
相关文章推荐
- 在Mac/Linux/Windows上编译corefx遇到的问题及解决方法
- uvalive 6886 Flowery Trails fft
- JQuery选择器
- MySQL 数据类型
- gearman 入门使用笔记
- HDU1171
- JQ 选择器、属性 、筛选、文档处理、事件、效果
- Js jQuery 一些用法(1)
- Office2010安装问题总结
- 黑马程序员——C语言中的指针变量初步认识
- ListView有背景图片或背景颜色,那么在滑动ListView的时候,ListView的背景会变黑
- 性能优化
- kali安装后的基本配置
- 回顾SIGKDD被拒
- Mybatis JNDI集成C3P0数据源
- 我的乐高机器人
- linux 查看文件
- spark streaming测试之四设置窗口大小接收数据
- 编码表概述和常见编码表
- java 设计模式-----适配器模式