编制模拟“五个哲学家”问题的线程实现(unix操作系统系)

编制模拟“五个哲学家”问题的程序

一.实验目的

学习和掌握并发进程同步的概念和方法。

二.实验要求

1、程序语法

philosopher [ -t <time> ]

<time>是哲学家进餐和沉思的持续时间值,虚拟主机,缺省值为2秒。

2、五个哲学家的编号为0~4,分别用五个进程独立模拟。

3、程序的输出要简洁,仅输出每个哲学家进餐和沉思的信息。例如,当编号为3的哲学家在进餐时,香港虚拟主机,就打印:

philosopher 3 is eating

而当他在沉思时,则打印:

philosopher 3 is thinking

除此之外不要输出其他任何信息。

4、利用线程或IPC机制进行同步。

5、程序应该一直运行,直到人为地终止它(如按Ctrl-C或Ctrl-\)。不允许出现僵尸进程。

三.实验代码

#include<sys/types.h>#include<semaphore.h>#include <pthread.h>#include<sys/stat.h>#include<malloc.h>#include<fcntl.h>#include<string.h>#include<unistd.h>#includeN 5//pthread_t pt[5];//sem_t bin_sem[5];pthread_t *pt;sem_t *bin_sem;int num_=0;putFork(int i);void thinking(int i,int nsecs);void eating(int i,int nsecs);void takeFork(int i);void* philosopher(void *str){int nsecs=2;char *ptr;ptr=str;int i=atoi(ptr);i=num_;printf(,i);while(1) {thinking(i, nsecs); // 哲学家i思考nsecs秒takeFork(i);// 哲学家i拿起叉子eating(i, nsecs);// 哲学家i进餐nsecs秒putFork(i);// 哲学家i放下叉子 }}int main(int argc,char *argv[]){int res,err;int i=0;pid_t pid;pt=(pthread_t*) calloc(N,sizeof(pthread_t));bin_sem=(sem_t*) calloc(N,sizeof(sem_t));for(i = 0; i < N; i++) {res=sem_init(&bin_sem[i],1,1);}for(i = 0; i < N; i++) {char abc[10];sprintf(abc,,i);err = pthread_create(&pt[i], NULL,philosopher,abc);if (err != 0)err_quit(, strerror(err));num_++;sleep(1);}sleep(100);}void takeFork(int i){if( i == N – 1 ) {sem_wait(&bin_sem[0]);sem_wait(&bin_sem[i]);}else {sem_wait(&bin_sem[i]);sem_wait(&bin_sem[i+1]);}}void putFork(int i){if( i == N – 1 ) {sem_post(&bin_sem[0]);sem_post(&bin_sem[i]);}else {if(i%2==0){sem_post(&bin_sem[i]);sem_post(&bin_sem[i+1]);}else{sem_post(&bin_sem[i+1]);sem_post(&bin_sem[i]);}}}void thinking(int i,int nsecs){sleep(1);printf(,i,nsecs);}void eating(int i,int nsecs){sleep(1);printf(,i,nsecs);

四.实验结果:

1.编译原文件:

2.实验结果

执行./so,直到按Ctrl-C或Ctrl-\时结束。

本程序为不带时间的运行方式。时间设置已经在内部设定。

六.说明:

1.分别设定各个哲学家的eating与thinking的值,香港服务器,再调用相应的函数进行区别,当然,在函数的编写过程当中,应当尽量避免函数中五个哲学家同时僵尸,而使程序出错。

2,程序与上一次发布的《哲学及问题》的一样。只是换成了线程的思路。

3.通过这次试验学习和掌握并发线程同步的概念和方法。

见过旅行风景,就这样,慢慢学会了长大。

编制模拟“五个哲学家”问题的线程实现(unix操作系统系)

相关文章:

  • 【算法】直接插入排序C语言实现
  • 嵌入式 FAAC1.28 在海思HI3518C/HI3518A平台linux中的编译优化
  • Android 动画animation 深入分析
  • Mybatis极其(最)简(好)单(用)的一个分页插件
  • 你感兴趣的文章:

    标签云:

    亚洲高清电影在线, 免费高清电影, 八戒影院夜间, 八戒电影最新大片, 出轨在线电影, 午夜电影院, 在线影院a1166, 在线电影院, 在线观看美剧下载, 日本爱情电影, 日韩高清电影在线, 电影天堂网, 直播盒子app, 聚合直播, 高清美剧, 高清美剧在线观看 EhViewer-E站, E站, E站绿色版, qqmulu.com, qq目录网, qq网站目录,