[問題] Thread and Event的疑惑

看板C_and_CPP作者 (我愛阿蓉)時間15年前 (2010/06/08 12:12), 編輯推噓3(304)
留言7則, 3人參與, 最新討論串1/2 (看更多)
http://msdn.microsoft.com/en-us/library/ms686915(v=VS.85).aspx 這是關於使用event object的範例 讓我不解的是 他開4條thread 但是他卻只有一次的setEvent 假設說 這四條thread同時都卡在 WaitForSingleObject 當event signal了 同時這四條 應該要會一起有權力跑switch 印這些字串 但很怪的是 他event是設定manual-reset 所以應該setEvent後就永遠是signal了 但是他印的這些字串 卻完全不會交錯 我預期他會印Thread %d reading from buffer 可能會變成ThThread xxxx readreing之類的字串沒印完就換人印 但事實上我跑這段完全不會有這現象.....讓我不解 於是我把code改為 printf("Thread %d reading from buffer\n", GetCurrentThreadId()); printf("Thread %d reading from buffer2\n", GetCurrentThreadId()); printf("Thread %d reading from buffer3\n", GetCurrentThreadId()); 故意印3行 結果會變成 Thread 4592 reading from buffer Main thread waiting for threads to exit... Thread 5752 reading from buffer Thread 5580 reading from buffer Thread 3568 reading from buffer Thread 4592 reading from buffer2 Thread 5752 reading from buffer2 Thread 5580 reading from buffer2 Thread 3568 reading from buffer2 Thread 4592 reading from buffer3 Thread 5752 reading from buffer3 Thread 5580 reading from buffer3 Thread 3568 reading from buffer3 完全不會被中斷 但我自己覺得大家都有權利跑switch那段 應該要交錯印才是阿 還是我對WaitForSingleObject有誤會... 請有經驗的版友指點迷津 實在想不透 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.64.222

06/08 16:36, , 1F
咦?不是還有個WaitForMultipleObjects?
06/08 16:36, 1F

06/08 18:49, , 2F
他那個目的是用來等thread都跑完才能結束程式不是嗎!?
06/08 18:49, 2F

06/08 20:11, , 3F
喔…終於有看懂要問什麼了… @___@""
06/08 20:11, 3F

06/08 20:11, , 4F
我想printf是個atomic operation吧~~
06/08 20:11, 4F

06/08 20:32, , 5F
!!我剛改用cout似乎就會耶!!所以還是要確保wait後裡面的sync
06/08 20:32, 5F

06/08 20:33, , 6F
要自己maintain嚕? printf只是剛好有作!!??
06/08 20:33, 6F

06/08 21:28, , 7F
嗯,要自己maintain沒錯~~
06/08 21:28, 7F
文章代碼(AID): #1C3SCq-o (C_and_CPP)
文章代碼(AID): #1C3SCq-o (C_and_CPP)