Re: [問題] CreateMutex參數疑問

看板C_and_CPP作者 (程式設計家教)時間16年前 (2010/01/21 23:46), 編輯推噓2(208)
留言10則, 3人參與, 最新討論串3/3 (看更多)

01/21 20:26,
簡單說.. 得到幾次就要release幾次
01/21 20:26

01/21 20:27,
你的main()從CreateMutex就得到一次, WaitForSingle..()
01/21 20:27

01/21 20:28,
又得到一次, 所以要release 2次
01/21 20:28

01/21 21:47,
我秀逗了... 請忽略我的推文 Orz
01/21 21:47

01/21 22:06,
意思就是說我create第二個參數設true就算一次了喔
01/21 22:06

01/21 22:06,
那他會交錯的輸出是運氣好嚕 剛好照順序跑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)

01/21 23:55, , 1F
我會deadlock阿!所以while跳出還要在release一次!?
01/21 23:55, 1F

01/22 00:39, , 2F
就像前面建議的 你產生mutex時不要取得ownership
01/22 00:39, 2F

01/22 00:39, , 3F
這樣三個thread就會正常執行了 當然你要MAIN先執行完的
01/22 00:39, 3F

01/22 00:40, , 4F
話 就在等待thread之前再releaseu一次
01/22 00:40, 4F

01/22 01:18, , 5F
恩 不過我覺得有辦法把createmutex下在thread裡面讓某thread
01/22 01:18, 5F

01/22 01:18, , 6F
一開始就擁有ownership嗎? 我怎麼想都只能寫在main耶
01/22 01:18, 6F

01/22 01:35, , 7F
有什麼理由讓你一定要這麼做嗎
01/22 01:35, 7F

01/22 01:37, , 8F
不過如果真的要這麼做 可以讓mutex有名字
01/22 01:37, 8F

01/22 01:37, , 9F
這樣只有第一個call到create的人會建立mutex
01/22 01:37, 9F

01/22 01:38, , 10F
其他次call createmutex會回傳已經存在的handle
01/22 01:38, 10F
文章代碼(AID): #1BM7R6tp (C_and_CPP)
文章代碼(AID): #1BM7R6tp (C_and_CPP)