日期:2014-05-16  浏览次数:20662 次

多线程编程的问题
记得一道公司面试题,感觉自己回答的不好,拿来问问高手。

实现下面这个场景:
小明的妈妈要做饭,小明想出去玩,妈妈说:你先去玩吧,做好饭后叫你回来吃。
小明如果先结束游戏,则等待开饭,吃完后一起结束。
妈妈如果先做好饭,则暂停叫小明来吃饭,吃完后小明继续玩。
linux 多线程实现
输出:
妈妈:开始准备
妈妈:让小明出去玩
妈妈:做饭
小明:玩
。。。(两线程分别输出)
妈妈:叫小明吃饭
妈妈和小明:吃饭
小明:玩
小明:玩

我实现的方法是:
小明如果先玩完比较好办,thread condition wait就行了,妈妈发signal
但是妈妈先做好饭就比较麻烦了,小明要不断的检查一个标志位,看妈妈是否叫了他。感觉很浪费资源。有没有好办法?就是说,有没有什么办法,从母线程暂停子线程

------解决方案--------------------
小明每次输出玩前,要加一个锁,玩锁
妈妈做完饭就对玩锁加锁,这个时候小明发现加不了锁了,就去吃饭。
吃完妈妈解锁。