Re: [問題] 關於 CRITICAL_SECTION 與執行緒同步
我是用你的這個範例去做測試
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
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 3 之 4 篇):