选择遗忘|面试官:这个经典的并发问题用 Go 语言如何实现?( 三 )
<-this.streamForks[leftNum] //把已经拿起来的左边筷子释放出去PutLeftFork(philosopher)}default: //无法拿起左边筷子fmt.Printf("Philosopher %d can't pick fork %d.\n", philosopher, leftNum)}this.missingDoubleForkTimes++Think() }}这边对于每一只筷子的具体表现就是一个 buffered channel , 回圈流程如下:
- 先尝试把自己的号码塞入左边的 buffered channel
- 成功了 , 就是抢到一只筷子 , 往下 。
- 失败了 , 跳到「default: //无法拿起左边筷子」 , 思考一下 , 然后从头开始 。
- 再尝试把自己的号码塞入右边的 buffered channel
- 成功了 , 就是抢到两只筷子 , 开始吃 , 吃饱离开 , 退出餐桌 。
- 失败了 , 跳到「default: //无法拿起右边筷子」 , 把已经抢到的左边筷子还回去 , 思考一下 , 然后从头开始 。
完整解题代码:
示意图:
推荐阅读
- 窘境|窘境中求助惨遭拒绝!中国此次也选择置之不理,俄国:早该如此
- 五商文化资讯微软选择“沉海”,华为却深藏贵州大山!阿里亚马逊也纷纷布局
- 动力|迈腾,君越,雅阁,凯美瑞之间选择,油耗低动力好,哪款更适合?
- 英超|兰帕德后悔么?放弃他成最差选择,26岁弃将如今是英超黑马缔造者
- 家电消费网| 副总裁:500万用户选择了OPPO的IoT,OPPO发布智能电视
- 网友|面试时话都没讲就赶人走?”,杭州小伙想不通:“就因为家里拆迁了
- 晴晴侃游戏|盗贼和狂暴战谁更适合呢,魔兽怀旧服咸鱼剑近战该如何选择
- 内蒙古|菅义伟第一次出访,为啥选择越南和印尼而不选择美国?
- 网络游戏|魔兽怀旧服咸鱼剑近战该如何选择,盗贼和狂暴战谁更适合呢
- 极客码头|你是选择盒装CPU还是散装CPU?,如果能够节省你装机的预算
