环境win7旗舰64位系统,vs2013,AMD fx?4100 Auad-core processor ,8G内存,
看《windows核心编程》线程同步一章,看到有说g_x++会不同步的问题,试着写些代码加深印象。发现+1太快了,看不出效果,于是for循环了1亿次。代码如下:
#include <span>"</span><span>stdafx.h</span><span>"</span><span>using</span> std::cout; <span>using</span> std::endl; <span>using</span><span> std::cin;
unsigned __stdcall ThreadFunRun(</span><span>void</span> * paData)<span>//</span><span>vs默认是__cdecl 调用</span><span>{
</span><span>int</span> *iData = (<span>int</span>*<span>)paData;
</span><span>for</span> (<span>int</span> index = <span>0</span>; index < <span>100000000</span>; ++<span>index)
{
(</span>*iData)++<span>;
}
</span><span>//</span><span>cout <<"线程函数中"<< *iData << endl;</span><span>return</span><span>0</span><span>;
}
</span><span>using</span><span> std::vector;
vector</span><HANDLE> createThread(<span>int</span> &<span>ivalue)
{
vector</span><HANDLE><span> vecH;
</span><span>const</span><span>int</span> iThrCount = <span>2</span><span>;
</span><span>for</span> (<span>int</span> index = <span>0</span>; index < iThrCount; ++<span>index)
{
HANDLE hpt1 </span>=<span> (HANDLE)_beginthreadex(
NULL,</span><span>//</span><span>SECURITY_ATTRIBUTES</span><span>0</span>,<span>//</span><span>cbStackSize</span><span> ThreadFunRun,
</span>&<span>ivalue,
</span><span>0</span><span>,
NULL
);
vecH.push_back(hpt1);
}
</span><span>return</span><span> vecH;
}
</span><span>bool</span> waitForRun(vector<HANDLE> &<span> hs)
{
</span><span>for</span> (<span>int</span> index = <span>0</span>; index < hs.size(); ++<span>index)
{
DWORD dwaitRes </span>=<span> WaitForSingleObject(hs[index], INFINITE);
</span><span>if</span> (dwaitRes !=<span>WAIT_FAILED)
{
CloseHandle(hs[index]);
}
</span><span>else</span><span>
{
cout </span><< <span>"</span><span>等待时出错,出错ID:</span><span>"</span> << GetLastError() <<<span> endl;
</span><span>for</span> (; index < hs.size();++<span>index)
{
CloseHandle(hs[index]);
}
</span><span>return</span><span>false</span><span>;
}
}
</span><span>return</span><span>true</span><span>;
}
</span><span>int</span> _tmain(<span>int</span> argc, _TCHAR*<span> argv[])
{
</span><span>const</span><span>int</span> icount = <span>50</span><span>;
</span><span>for</span> (<span>int</span> index = <span>0</span>; index < icount; ++<span>index)
{
</span><span>int</span> ivCalc = <span>0</span><span>;
vector</span><HANDLE> hsGet =<span> createThread(ivCalc);
</span><span>//</span><span> Sleep(60);
</span><span>//</span><span> cout << ivCalc << endl;</span><span>if</span><span> (waitForRun(hsGet))
cout </span><< ivCalc <<<span> endl;
</span><span>else</span><span>
cout</span><<<span>"</span><span>第 </span><span>"</span><<index << <span>"</span><span> 次等待线程结束出错</span><span>"</span> <<<span> endl;
}
</span><span>return</span><span>0</span><span>;
}</span>
运行效果部分复制如下:
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亿的。
原文:http://www.cnblogs.com/xiarl/p/4541783.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!