→ ksmrt0123:簡單說.. 得到幾次就要release幾次 01/21 20:26
→ ksmrt0123:你的main()從CreateMutex就得到一次, WaitForSingle..() 01/21 20:27
→ ksmrt0123:又得到一次, 所以要release 2次 01/21 20:28
→ ledia:我秀逗了... 請忽略我的推文 Orz 01/21 21:47
→ QQ29:意思就是說我create第二個參數設true就算一次了喔 01/21 22:06
→ QQ29:那他會交錯的輸出是運氣好嚕 剛好照順序跑thread? 01/21 22:06
就是這個意思,不過我好奇的是,竟然沒有deadlock...
你一開始擁有了一次
接下來每次while內都再擁有一次,然後finally釋放一次
照理說應該接下來應該還剩下一次要釋放
然後你的程式就去等threads,threads又在等你的mutex釋放
應該是要deadlock才對...
不過話說你的thread一般來說121212的執行順序是很合理的,
連續多次1或2的機會反而比較少~ 因為一個thread等另一個,另一個釋放了,很可能
context switch就換成另一個thread拿到,當然也有可能執行多次才context switch
但這也跟同步物件的實做有關,看是否被釋放的當下就立刻將ownership轉到已經在等待
的thread,如果是這樣那就一定是121212...的順序
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.166.194.58
※ 編輯: cplusplus 來自: 218.166.194.58 (01/21 23:48)
推 QQ29:我會deadlock阿!所以while跳出還要在release一次!? 01/21 23:55
→ cplusplus:就像前面建議的 你產生mutex時不要取得ownership 01/22 00:39
→ cplusplus:這樣三個thread就會正常執行了 當然你要MAIN先執行完的 01/22 00:39
→ cplusplus:話 就在等待thread之前再releaseu一次 01/22 00:40
推 QQ29:恩 不過我覺得有辦法把createmutex下在thread裡面讓某thread 01/22 01:18
→ QQ29:一開始就擁有ownership嗎? 我怎麼想都只能寫在main耶 01/22 01:18
→ fragileness:有什麼理由讓你一定要這麼做嗎 01/22 01:35
→ fragileness:不過如果真的要這麼做 可以讓mutex有名字 01/22 01:37
→ fragileness:這樣只有第一個call到create的人會建立mutex 01/22 01:37
→ fragileness:其他次call createmutex會回傳已經存在的handle 01/22 01:38