Re: [問題] multi-thread communication
※ 引述《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
討論串 (同標題文章)