作者meltice (三亿两千万大散户)
看板Programming
标题Re: [问题] 关於 CRITICAL_SECTION 与执行绪同步
时间Fri Apr 25 13:41:06 2008
我是用你的这个范例去做测试
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後就没有错误了
还有
你的foo()里面最後要加上_endthread();
不然Windows的控制码会不断增加(从工作管理员可以看到)
或者如果使用CreateThread记得要CloseHandle
最後我又做了个实验
我猜你的CPU应该也是双核心以上的吧
因为我从工作管理员的设定相关性让程式只在某一颗CPU执行
结果神奇的事发生了
num就永远都会等於5
所以你这只程式就算不使用critical section保护
在单核心CPU下应该也是OK的(至少在我电脑上看起来是OK的)
或者是可能需要非常久的时间才会发生"意外"吧
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.14.177.226