⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 philosopher.c

📁 五个哲学家的就餐问题
💻 C
字号:
#include "apue.h"#include "lock.c"#define	 N	5static char *forks[5]={"fork0","fork1","fork2","fork3","fork4"};static int  time;void thinking(int k,int nsecs){	printf("philosopher %d is thinking\n",k);	sleep(nsecs);}void eating(int k,int nsecs){	printf("philosopher %d is eating\n",k);	sleep(nsecs);}void takefork(int k){	if(k==N-1){		lock(forks[0]);		lock(forks[k]);	}	else{		lock(forks[k]);		lock(forks[k+1]);	}}void putfork(int k){	if(k==N-1){		unlock(forks[0]);		unlock(forks[k]);	}	else{		unlock(forks[k]);		unlock(forks[k+1]);	}}void philosopher(int i){	while(1){		thinking(i,time);		takefork(i);		eating(i,time);		putfork(i);	}}int main(int argc,char *argv[]){	int 	i;	pid_t	pid;	if(argc==3 && !strcmp(argv[1],"-t"))	time=atoi(argv[2]);	else if(argc==1)	time=2;	else	err_sys("usage:philosopher [-t <time>]\n");	for(i=0;i<N;i++)	initlock(forks[i]);	for(i=0;i<N;i++){		if((pid=fork())<0)			err_sys("fork error!");		else if(!pid)			philosopher(i);	}	wait(NULL);	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -