Re: [問題] multi-thread communication

看板MacDev作者 (畢業了..@@")時間10年前 (2013/11/02 17:17), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/4 (看更多)
※ 引述《DicYang (寂屋出租)》之銘言: : ※ 引述《DicYang (寂屋出租)》之銘言: : : 請問大家~ : : mac上有什麼可以用的object可以做到像win32 api的 : : waitforsingleobject/waitformultipleobjects這類的功能嗎? : : 謝謝 : 不好意思又有個新的問題了 : 假設我有1個main thread,和4個child thread(這4個child thread所需要執行 : 的function是一樣的,就假設每個thread依序要執行func1~func8好了) : 其中宣告一個global的NSCondiction* syncCondition : 我想要讓這4個child thread同時一起執行func5 : 所以我就在每個thread要開始執行 : func5前都先去用NSNotification去notify main thread接著再馬上去呼叫 : [syncConditoin wait]去等待(等待main thread叫醒) : 而每次main thread收到notification後就去檢查是否這4個child : thread都已經在等待了(這裡的檢查方法很爛,是用個counter來判斷的), : 如果是的話main thread就會去invoke : [syncCondition broadcast]去喚醒這4個child thread繼續執行 : 問題來了: : 1. 最後一個child thread去送notification後,main thread就馬去下broadcast了, : 所以最後一個child thread就會卡死在wait裡面,其中3個thread會醒來 : 2. 接1,我目前的解法是讓每次下notification之前先sleep 1秒,這樣可以很醜的 : 解掉,有沒有什麼比較好的解法呢? : 3. 有沒有方法可以知道一個thread是否在condition wait時卡住呢? : 4. 有沒有什麼更好的寫法可以建議呢? : 謝謝~ 以你的例子,我建議還是用GCD來的好 先產生四個Queue (用dispatch_queue_create) 事實上這個也是等同於產生四個child thread 然後產生一個group (用dispatch_group_create) 然後把你的task丟到四個queue (用dispatch_group_async) 最後用dispatch_group_wait來去等這些task完成 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.201.41
文章代碼(AID): #1ITCCvFp (MacDev)
討論串 (同標題文章)
文章代碼(AID): #1ITCCvFp (MacDev)