看板 C_and_CPP 關於我們 聯絡資訊
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