看板 C_and_CPP 關於我們 聯絡資訊
http://msdn.microsoft.com/en-us/library/ms686927(VS.85).aspx 不好意思請教各位 我把MSDN這範例拿來跑 http://nopaste.csie.org/57d24#form 邏輯都沒變 我只有加上自己呼叫 WriteToDatabase(0); 另外CreateMutex第二個參數設定為true 跑出來的行為讓我非常疑惑 1. 他一開始用main去create 所以onwership就是main這個thread.... 而他可以順利的跑第一次的while迴圈後 跑到 ReleaseMutex... 這時他應該已經把ownership給釋出 所以我認為thread1 和 thread2 應該會插入 近來跑 2. 執行結果卻是 main跑20圈後 卡在那邊 沒有辦法讓出ownership給thread跑 最後一圈至少都有releasemutex 不至於卡住吧?? 我觀念似乎有錯 但是又想不到合理解釋 3. 我嘗試著在106行跳出while後 在realseMutex一次 這時執行結果就變成 main thread跑完 thread1 thread2會穿插的跑 (1212121212~~~) 為啥要在release一次才有效果~而且為什麼是穿插跑 而不是1122121211之類的的情 況產生 有可能會跑幾次才換thread跑. 以上我實在不知道如何解釋 雖然看別人code似乎都是設定false... 就變成說隨便誰先都沒差了~~可是就覺得好像要搞懂才心安 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.64.222 ※ 編輯: QQ29 來自: 219.87.64.222 (01/21 13:37)
ledia:正常執行時, __finally 是執行不到的 01/21 14:38
ledia:所以你如果沒有在 WriteToDatabase 最後面加 ReleaseMutex 01/21 14:38
ledia:那麼 main thread 一開始拿到的 mutex 就永遠放不出去了 01/21 14:38
ledia:那個參數如其名, 就是 mutex 建出來之後要不要預設就先拿到 01/21 14:39
ledia:擁有權 01/21 14:39
ledia:合理的做法應該是一開始不拿走擁有權, 有需要時再拿 01/21 14:40
ksmrt0123:樓上對 __finally 可能有誤解; 原po請看MSDN對 01/21 16:54
ksmrt0123:CreateMutex 的說明, Remarks 的第5段有解答你的疑問 01/21 16:55
cplusplus:finally在各個語言的意義應該都一樣 一樓有誤 01/21 16:57
cplusplus:sorry 我慢了... 01/21 16:57
QQ29:請教一下k大 我看了那段 可是說真的我看不懂他表達的意思 01/21 18:26
QQ29:wait函式不就是在等mutex可以用(signaled) 而要可以用是透過 01/21 18:26
QQ29:release 但是main一開始擁有onwership, wait一開始攔不住他 01/21 18:26
QQ29:做完也有呼叫release 我覺得我中間觀念有點問題 01/21 18:26
QQ29:可否請K大講解一下@@ 01/21 18:27
ksmrt0123:我請你看第5段 你好像看到第4段去了... 01/21 19:18
ksmrt0123:The thread that owns a mutex can specify the same 01/21 19:18
ksmrt0123:mutex in repeated wait function calls without 01/21 19:19
ksmrt0123:blocking its execution. 這段... 01/21 19:19
QQ29:對阿我看這段後 發現不太懂耶 01/21 19:41
QQ29:什麼specify ~不懂他表達的意思... 01/21 19:41
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