题目
前提:哲学家吃意面必须要两支叉子
可以看到,如果每一个进程(哲学家)都请求左边的一支叉子,将会出现死锁(谁也吃不到意面的情况),这不满足有限等待的原则。所以当每一位哲学家申请第一支叉子前先封锁桌面,这样谁也不能再动叉子,两支叉子拿好后再解锁。
一个哲学家吃饭的过程:“都不准pick叉子!”——>拿起左边叉子——>拿起右边叉子——>"好了现在你们可以pick了"
改进算法
证明
显然可以拿起右边的叉子然后去吃饭啦
- 拿起一支叉子前右边的没被占用
- 拿起一支叉子前右边的已经被占用
那么右边的一定已经在吃饭了,等他吃完饭释放叉子就行。假设右边的没在吃饭,那么右边的就一定没有解锁桌面,该哲学家就没有再次封锁桌面的资格。