Re: [問題] 關於 CRITICAL_SECTION 與執行緒同步

看板Programming作者 (紫雁)時間17年前 (2008/04/25 06:09), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串4/4 (看更多)
※ 引述《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

04/25 19:46, , 1F
我用_beginthread也是有這個問題
04/25 19:46, 1F

04/25 19:46, , 2F
但換成CreateThread之後就OK了
04/25 19:46, 2F
文章代碼(AID): #184NMLej (Programming)
討論串 (同標題文章)
文章代碼(AID): #184NMLej (Programming)