作者james732 (紫雁)
站内Programming
标题Re: [问题] 关於 CRITICAL_SECTION 与执行绪同步
时间Fri Apr 25 14:09:24 2008
※ 引述《meltice (三亿两千万大散户)》之铭言:
: 我是用你的这个范例去做测试
: http://studentweb.ncnu.edu.tw/94321016/rc1.txt
: 首先
: 我觉得_beginthread不太适合跟WaitForMultipleObjects一起使用
: 因为_beginthread是CRT 而WaitForMultipleObjects是Win32 API
: 我把_beginthread换成CreateThread之後
: 在我的电脑上跑出现num!=5的数量就减少八成以上
: 而且我把WaitForMultipleObjects的return值印出来看
: 使用_beginthread会产生一堆错误的return value
: 换成CreateThread後就没有错误了
那如果我要用 _beginthreadex
(书上说 如果有用到C的标准函式 就要用 _beginthreadex)
那有没有可以代替 WaitForMultipleObjects 的函式呢?
: 还有
: 你的foo()里面最後要加上_endthread();
: 不然Windows的控制码会不断增加(从工作管理员可以看到)
: 或者如果使用CreateThread记得要CloseHandle
这个地方我後来有发现 也谢谢你的提醒
: 最後我又做了个实验
: 我猜你的CPU应该也是双核心以上的吧
: 因为我从工作管理员的设定相关性让程式只在某一颗CPU执行
: 结果神奇的事发生了
: num就永远都会等於5
: 所以你这只程式就算不使用critical section保护
: 在单核心CPU下应该也是OK的(至少在我电脑上看起来是OK的)
: 或者是可能需要非常久的时间才会发生"意外"吧
不是耶 我的电脑也是单核的
而且连 hyper-threading 都没有支援
所以工作管理员只看得到一颗 CPU 而已
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.22.18.83
1F:推 meltice:我用_beginthread也是有这个问题 61.14.177.226 04/25 19:46
2F:→ meltice:但换成CreateThread之後就OK了 61.14.177.226 04/25 19:46