参考线程同步之信号量(sem_init,sem_post,sem_wait) - 郑志强Aloha - 博客园
以及《操作系统概念》第七版 第六章 项目:生产者-消费者问题
题目描述:
哲学家进餐问题描述有五个哲学家,他们的生活方式是交替地进行思考和进餐,n哲学家们共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五支筷子,n平时哲学家进行思考,饥饿时便试图取其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐,n进餐完毕,放下筷子又继续思考。
如图。
![](https://i-blog.csdnimg.cn/blog_migrate/0a5425bf66f832c191f1a755021d320c.webp?x-image-process=image/format,png)
编号都为0-4。哲学家0-3左边的筷子编号为i,右边为i+1。
哲学家4左边的筷子为4,右边为0。(因为是圆桌嘛)
代码:
这里ret应该用int。。忘了改了。
![](https://i-blog.csdnimg.cn/blog_migrate/27a03423be836bea10136d29c199e790.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/2cec7cc4fcaa8c09debea0d336051f6e.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/0ce0a17eb779d202afdfc403e8326899.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/ad805898b83fe6b1229653684c9e723d.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/e90333e9f8da9e56dca7862f27173b45.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/c790834a717b31e00d14d2e6d6b843d9.webp?x-image-process=image/format,png)
效果图:
![](https://i-blog.csdnimg.cn/blog_migrate/49ce0ba7413ff4332329f007e7069517.webp?x-image-process=image/format,png)
遇到的问题:
![](https://i-blog.csdnimg.cn/blog_migrate/ec41d570bbc4d1c8043f281834bf0a6f.webp?x-image-process=image/format,png)
解决:应该放到main函数里初始化
![](https://i-blog.csdnimg.cn/blog_migrate/5c0b0b639e525a0f034c68a7991370d9.webp?x-image-process=image/format,png)
解决:太低级的错误了。。。。居然用了函数名做变量名。
![](https://i-blog.csdnimg.cn/blog_migrate/1912d8f9a407bf389767ff2cc7f4dc58.webp?x-image-process=image/format,png)