免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 18374 | 回复: 16
打印 上一主题 下一主题

[学习分享] 求哲学家进餐问题的c语言代码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-25 09:08 |只看该作者 |倒序浏览
本帖最后由 shy永久 于 2012-10-25 09:12 编辑

希望各位大神们能给我一份  c语言  格式的哲学家就餐问题的代码,注:不是c++代码,我想分析学习一下这个代码,在此拜谢了,

论坛徽章:
224
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:1015-16赛季CBA联赛之四川
日期:2023-07-25 16:53:45操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
2 [报告]
发表于 2012-10-25 09:12 |只看该作者
貌似没有程序代码吧,都是伪代码

论坛徽章:
0
3 [报告]
发表于 2012-10-25 09:42 |只看该作者
回复 2# action08


    不会吧,真的吗?那您给个伪代码让我先看看吧,我其实想要源代码注释一下,学习线程的,呵呵

论坛徽章:
224
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:1015-16赛季CBA联赛之四川
日期:2023-07-25 16:53:45操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
4 [报告]
发表于 2012-10-25 09:52 |只看该作者
你在学程序设计,还是在学操作系统?稍微有点品味的OS教科书都有相关伪代码的,
哲学家就餐本身并不是一个程序,而是为了引入一类话题,在OS称为进程同步/异步,

学习进程,例子多球了,网上随便找找都是

论坛徽章:
0
5 [报告]
发表于 2012-10-25 10:05 |只看该作者
回复 4# action08


    我先学了linux操作系统,现在也涉及到程序设计,现在老师让我找到哲学家进餐、还有读者写者问题的相关代码,自己注释一下,进一步的理解线程的作用和实现,我发现一些代码都是c++的,不是c语言,所以想麻烦您,帮帮忙

论坛徽章:
224
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:1015-16赛季CBA联赛之四川
日期:2023-07-25 16:53:45操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
6 [报告]
发表于 2012-10-25 10:09 |只看该作者
大三,还是大四??你都有老师了,还是想办法跟老师保持节奏吧。
看看别的同学是怎么做的,商量一下,——这样有助于培养团队意识


听我的,不会害你

论坛徽章:
0
7 [报告]
发表于 2012-10-29 10:07 |只看该作者
回复 6# action08


    嗯嗯,好吧,不过我还是的分析代码,那是任务啊,呵呵

论坛徽章:
1
狮子座
日期:2013-09-29 16:47:13
8 [报告]
发表于 2012-10-30 14:58 |只看该作者
我这倒是有份,不知合不合要求…… philosopher.zip (683 Bytes, 下载次数: 419)

  1. #include <pthread.h>
  2. #include <stdio.h>

  3. #define N 5
  4. #define LEFT (i+N-1)%N
  5. #define RIGHT (i+1)%N
  6. #define THINK_TIME 3
  7. #define EAT_TIME 2

  8. enum { THINKING, HUNGRY, EATING } state[N];

  9. pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER, s[N];

  10. void test(int i)
  11. {
  12.     if (state[i] == HUNGRY
  13.      && state[LEFT] != EATING
  14.      && state[RIGHT] != EATING)
  15.     {
  16.         state[i] = EATING;
  17.         pthread_mutex_unlock(&s[i]);
  18.     }
  19. }

  20. void take_forks(int i)
  21. {
  22.     pthread_mutex_lock(&mutex);
  23.     state[i] = HUNGRY;
  24.     test(i);
  25.     pthread_mutex_unlock(&mutex);
  26.     pthread_mutex_lock(&s[i]);
  27. }

  28. void put_forks(int i)
  29. {
  30.     pthread_mutex_lock(&mutex);
  31.     state[i] = THINKING;
  32.     test(LEFT);
  33.     test(RIGHT);
  34.     pthread_mutex_unlock(&mutex);
  35. }

  36. void think(int i)
  37. {
  38.     printf("philosopher %d is thinking...\n", i);
  39.     sleep(THINK_TIME);
  40. }

  41. void eat(int i)
  42. {
  43.     printf("philosopher %d is eating...\n", i);
  44.     sleep(EAT_TIME);
  45. }

  46. void* phi(void* vargp)
  47. {
  48.     int i = *(int*)vargp;
  49.     while (1)
  50.     {
  51.         think(i);
  52.         take_forks(i);
  53.         eat(i);
  54.         put_forks(i);
  55.     }
  56.     return NULL;
  57. }

  58. int main()
  59. {
  60.     int i;
  61.     pthread_t tid[N];
  62.     for (i = 0; i < N; i++)
  63.         pthread_create(&tid[i], NULL, phi, (void*)(&i));
  64.     for (i = 0; i < N; i++)
  65.         pthread_join(tid[i], NULL);
  66.     return 0;
  67. }
复制代码

论坛徽章:
0
9 [报告]
发表于 2012-10-30 20:53 |只看该作者
回复 8# silverzhaojr


    真的很感谢,我回去好好看看,不管怎样真的谢谢,我会去注释运行一下,谢谢啦

论坛徽章:
0
10 [报告]
发表于 2012-11-03 23:04 |只看该作者
恩恩,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP