唉,真tm上火,面试官又给我上了一课。前两天去某厂面试,问了我一道什么哲学家就餐问题。
真的,太难搞了,而且还挺经典的!反正我是不会,我给你们分享一下,如果你近期也打算跳槽,或者想涨涨知识的,我建议你好好看看这个!
假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。
吃东西的时候,他们就停止思考,思考的时候也停止吃东西。餐桌中间有一大碗意大利面,每两个哲学家之间有一只餐叉。
不过哲学家从来不交谈,这就很危险,可能产生死锁,每个哲学家都拿着左手的餐叉,永远都在等右边的餐叉(或者相反)。
即使没有死锁,也有可能发生资源耗尽。例如,假设规定当哲学家等待另一只餐叉超过五分钟后就放下自己手里的那一只餐叉,并且再等五分钟后进行下一次尝试。
这个策略消除了死锁,但仍然有可能发生活锁。
如果五位哲学家在完全相同的时刻进入餐厅,并同时拿起左边的餐叉,那么这些哲学家就会等待五分钟,同时放下手中的餐叉,再等五分钟,又同时拿起这些餐叉。
在实际的计算机问题中,缺乏餐叉可以类比为缺乏共享资源。
一种常用的计算机技术是资源加锁,用来保证在某个时刻,资源只能被一个程序或一段代码访问。
当一个程序想要使用的资源已经被另一个程序锁定,它就等待资源解锁。当多个程序涉及到加锁的资源时,在某些情况下就有可能发生死锁。
例如,某个程序需要访问两个文件,当两个这样的程序各锁了一个文件,那它们都在等待对方解锁另一个文件,而这永远不会发生。
具体落地到代码,你知道如何实现吗?学会这道题,之后面试官再问你的时候就再也不怕了,纯纯的加分项!
推荐你来听一下马老师这次的训练营,老牛X了!除了这道经典的哲学家就餐问题,还有剩下的5道线程题,一个比一个狠。。。
报名方式,我放下面了!具体的你们可以看看大纲。而且马老师还在直播间给大家准备了超多的福利!


01
听完可以得到什么?
在你认真听完本次的直播课后,我相信你一定会有以下几个方面的提升!
系统梳理线程的执行流程及各阶段状态;
从全局思考如何解决业务问题,而不是局限于某个方面;
提高代码质量和瓶颈定位及调优能力;
助力面试中表现出色,取得更高水平的薪资;
对照知识体系,查漏补缺。
系统掌握一线互联网大厂的多线程知识体系和优化方案
02
课堂福利
送:最新总结:100道面试题以及解题秘籍



【一定要回复关键词】