作者popcorny (毕业了..@@")
看板MacDev
标题Re: [问题] multi-thread communication
时间Sat Nov 2 17:17:42 2013
※ 引述《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