作者james732 (紫雁)
站内Programming
标题[问题] 关於 CRITICAL_SECTION 与执行绪同步
时间Thu Apr 24 22:56:42 2008
※ [本文转录自 C_and_CPP 看板]
作者: james732 (紫雁) 站内: C_and_CPP
标题: [问题] 关於 WinAPI 的 CRITICAL_SECTION
时间: Thu Apr 24 21:58:40 2008
我写了一个程式 故意让它发生 race condition:
http://0rz.tw/fe3XI
1. 设定一个全域变数 num = 5
2. 用两个执行绪,分别做 num++ 与 num-- 的动作
3. 如果 num != 5 时,便印出这个值
这个程式确实能造成 race condition
num偶尔会冒出4与6
接下来 我要用 CRITICAL_SECTION 来避免发生 race condition
修改後的程式码:
http://0rz.tw/183ZJ
在上列的 2. 前後加上 EnterCriticalSection 与 LeaveCriticalSection
我以为这样就可以避免 race condition 了,也就是 num 不会出现 4 与 6
但是结果却没有改变,num 仍然会跑出 4 与 6
请问是不是我的观念有误,或者程式写错了呢?
使用 Visual Studio .NET 2005 SP1
第二个程式的完整专案资料夹压缩档在这:
http://0rz.tw/ee40d
(话说,为什麽 vs 的整个资料夹会这麽肥....)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.62.219
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.62.219
1F:推 scaaa:改用_beginthreadex, _endthreadex()吧 59.116.169.235 04/24 23:55
2F:→ scaaa:把MSDN看一遍你就知道了 59.116.169.235 04/24 23:59