文档章节

linux下的哲学家问题。。。水水的实验。。。

猜猜我是吧
 猜猜我是吧
发布于 2014/05/30 00:44
字数 408
阅读 37
收藏 0
点赞 0
评论 0
#include <stdio.h>
#include <pthread.h>
#include <string.h>
#include <sys/time.h>
#include <time.h>
#include <unistd.h>
pthread_t hThread[5];
int cs[5];
int mark;
void philosopher(int n) {
  while(mark) {}
  long long int seed;
  seed = time(NULL);
  while(1) {
  int state = 0;
  seed++;
  srand(seed);
  state = rand()%2;
  if(state == 1) {
    printf("%d号哲学家决定吃饭\n",n+1);
  } else {
    printf("%d号哲学家决定思考\n",n+1);
  }
  int dirct;
  int times;
  seed++;
  srand(seed);
  times = rand()%10;
  int mark1,mark2;
  mark1 = 0;
  mark2 = 0;
  if(state == 1) {
      while(1) {
        if(cs[n] == 0) {
          cs[n] = 1;
          mark1 = 1;
          printf("%d号哲学家拿起了左边的%d号筷子\n",n+1,n+1);
          break;
        }
        if(times == 0) {
          break;
        }
        usleep(1);
        times = times - 1;
        if(times == 0) {
          break;
        }
      }
      while(1) {
        if(cs[(n+1)%5] == 0) {
          cs[(n+1)%5] = 1;
          mark2 = 1;
          printf("%d号哲学家拿起了右边的%d号筷子\n",n+1,(n+1)%5+1);
          break;
        }
        if(times == 0) {
          break;
        }
        usleep(1);
        times = times - 1;
        if(times == 0) {
          break;
        }
      }
    if(mark1 == 1 && mark2 == 1) {
    printf("%d号哲学家开始吃饭\n",n+1);
    }
  } else {
    printf("%d号哲学家开始思考\n",n+1);
  }
  usleep(times);
  if(state == 1) {
    if(mark1 == 1 && mark2 == 1) {
    printf("%d号哲学家吃饭结束\n",n+1);
    }
    if(mark1 == 1) {
    printf("%d号哲学家放下了左边的%d号筷子\n",n+1,n+1);
    cs[n] = 0;
    mark1 = 0;
    }
    if(mark2 == 1) {
    printf("%d号哲学家放下了右边的%d号筷子\n",n+1,(n+1)%5+1);
    cs[(n+1)%5] = 0;
    mark2 = 0;
    }
  } else {
    printf("%d号哲学家思考结束\n",n+1);
  }
  }
}
int main(int argc,char *argv[]) {
  struct timeval tpstart,tpend;
  mark = 1;
  gettimeofday(&tpstart,NULL);
  int i;
  for(i = 0; i < 5; i++) {
    cs[i] = 0;
  }
  for(i = 0; i < 5; i++) {
    pthread_create(&hThread[i],NULL,(void*)philosopher,i);
  }
  mark = 0;
  sleep(50);
  for(i = 0; i < 5; i++) {
  pthread_cancel(hThread[i]);
  }
  return 0;
}


© 著作权归作者所有

共有 人打赏支持
猜猜我是吧
粉丝 9
博文 15
码字总数 7806
作品 0
广州
学着学着Linux系统写篇心得

本学期对于linux系统的学习,和自己买的一本《linux就该这么学》这本书,让我对linux有了一定的了解。我知道了linux只是个内核。现在的linux操作系统,都是用这么一个内核,加上其它的应用程...

linuxprobe16
06/03
0
0
【AI哲学】哲学在认知科学中的作用

摘 要 哲学到底对认知科学研究有哪些帮助?通过描述哲学家在认知科学研究中扮演的某些角色,我们可以间接地回答这个问题。这些角色包括拓荒者、建筑监理、禅师、绘图员、档案管理员、拉拉队队...

地球折叠
2017/12/06
0
0
Linux系统中的信号量机制

1、信号量的定义: 在linux中,信号量用上述结构体表示,我们可以通过该结构体定义一个信号量。 2、信号量的初始化: 可用void sema_init(struct semaphore *sem, int val);直接创建,其中v...

宅蓝三木
2014/04/24
0
0
使用vscode+less写wxss

小程序开发者工具实在是用不下去了,原生css也写不下去了,用开发者工具的这几天感觉回到了解放前 🙂️🙂️🙂️ 所以我用回了vscode,顺带看了一下怎么用less转为wxss 用了一个插件,叫...

Lxylona
04/03
0
0
Linux加入windows AD域

linux加入域中,一般都会想到加入LDAP中,这样管理起来方便,不过在linux下LDAP配置起来可不是很容易的,在企业办公环境中一般windows AD域占据霸主地位,配置方便嘛,针对生产环境的linux集...

China_OS
2013/12/07
0
0
嵌入式Linux开发及移植的学习建议

学习掌握嵌入式Linux的开发与移植现在非常流行。各种学习文章与培训班,充斥书店、街头。笔者,也上了路,经历漫长的摸索,终于一日开窍,但的确糟蹋了很多金钱与时间。作为穷人,现写下自己...

freecamel
2012/06/07
0
1
软件模拟DHCP中继代理的配置

DHCP中继可以实现在不同子网和物理网段之间处理和转发dhcp信息 DHCP具有以下功能: 保证任何IP地址在同一时刻只能由一台DHCP客户机所使用。 DHCP应当可以给用户分配永久固定的IP地址。 DHCP...

cchenyz
05/04
0
0
Linux进程的实际用户ID和有效用户ID

本人对Unix下的进程的实际用户ID和有效用户ID一直都比较迷惑,没有完全搞清楚。最近温习APUE(《高级UNIX环境编程》),终于对这两个概念有了一个清晰的认识,看来经典著作绝对需要温习多遍,...

simonws
2012/06/20
0
0
c语言什么书适合零基础的人看?只能告诉你书多看点总是没有坏处

c语言什么书籍 适合零基础的到脱发 基础篇 《C语言入门很简单》 《C语言从入门到精通》 《C程序设计语言 第2版·新版》 进阶篇 《C语言趣味编程100例》 《C专家编程》 《C和指针》 《C陷阱和...

这个人很懒什么都没留下
07/10
0
0
Linux系统有啥好的,你们都去学?

“linux有啥好的,你们都去学?”,当时我是大一新生,总觉得系统的知识是需要时间的积累的,在看到周围一些同学整理用黑框框敲来瞧去,眼里只有两个字“装逼”。一个二个下课后竟然还去跟老...

linux-tao
04/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
34分钟前
0
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
昨天
1
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
昨天
1
0
Confluence 6 安装补丁类文件

Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...

honeymose
昨天
0
0
非常实用的IDEA插件之总结

1、Alibaba Java Coding Guidelines 经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C...

Gibbons
昨天
1
0
Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jdk来运行...

TaoXu
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部