看板 Programming 關於我們 聯絡資訊
※ 引述《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
meltice:我用_beginthread也是有這個問題 61.14.177.226 04/25 19:46
meltice:但換成CreateThread之後就OK了 61.14.177.226 04/25 19:46