作者QQ29 (我愛阿蓉)
看板C_and_CPP
標題[問題] Thread and Event的疑惑
時間Tue Jun 8 12:12:34 2010
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
推 ilovebbs:咦?不是還有個WaitForMultipleObjects? 06/08 16:36
→ QQ29:他那個目的是用來等thread都跑完才能結束程式不是嗎!? 06/08 18:49
推 aecho:喔…終於有看懂要問什麼了… @___@"" 06/08 20:11
→ aecho:我想printf是個atomic operation吧~~ 06/08 20:11
→ QQ29:!!我剛改用cout似乎就會耶!!所以還是要確保wait後裡面的sync 06/08 20:32
→ QQ29:要自己maintain嚕? printf只是剛好有作!!?? 06/08 20:33
推 aecho:嗯,要自己maintain沒錯~~ 06/08 21:28