C语言:哲学家吃饭问题

//五个哲学家围坐在一起,两人之间都放有一个叉子,意大利面需要2个叉子吃,哲学家吃饭时候叉子只能拿左右手,哲学家除了吃饭时间其他时间都在思考
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <pthread.h>
#include <errno.h>
#include <math.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
//叉子作为mutex
pthread_mutex_t forkp[5] ;
void *eat_think(void *arg)
{
    //定义叉子编号
    char phi = *(char *)arg;
    int left,right;
    switch (phi){
        case 'A':
            left = 5;
            right = 1;
            break;
        case 'B':
            left = 1;
            right = 2;
            break;
        case 'C':
            left = 2;
            right = 3;
            break;
        case 'D':
            left = 3;
            right = 4;
            break;
        case 'E':
            left = 4;
            right = 5;
            break;
    }
 
 
    int i;
    for(;;){
        sleep(rand()%4);//思考0~3秒
        pthread_mutex_lock(&forkp[left]);//拿起左手的叉子
        printf("哲学家 %c 拿起左手的叉子 %d\n", phi, left);
        if (pthread_mutex_trylock(&forkp[right]) == EBUSY){//拿起右手的叉子
            pthread_mutex_unlock(&forkp[left]);//如果右边叉子被拿走放下左手的叉子
			printf("哲学家 %c 放下左手的叉子 %d\n", phi, left); 
            continue;
        }
        printf("哲学家 %c 拿起右手的叉子 %d\n", phi, right);
        printf("哲学家 %c 在吃饭\n",phi);
        printf("--------------------------------\n");
                sleep(rand()%4);//吃0~3秒
        pthread_mutex_unlock(&forkp[left]);
        pthread_mutex_unlock(&forkp[right]);
    }
}
int main(){
    pthread_t A,B,C,D,E;
 
 
    int i;
    for (i = 0; i < 5; i++)
        pthread_mutex_init(&forkp[i],NULL);
    pthread_create(&A,NULL, eat_think, "A");
    pthread_create(&B,NULL, eat_think, "B");
    pthread_create(&C,NULL, eat_think, "C");
    pthread_create(&D,NULL, eat_think, "D");
    pthread_create(&E,NULL, eat_think, "E");
 
 
    pthread_join(A,NULL);
    pthread_join(B,NULL);
    pthread_join(C,NULL);
    pthread_join(D,NULL);
    pthread_join(E,NULL);
    return 0;
}

转载于:https://www.cnblogs.com/gzk1171848896/p/9436548.html

Ubantu Linux是一个基于Debian的开源操作系统,它主要用于个人电脑、移动设备和云端服务器。它具有强大的安全性和稳定性,并且支持多种桌面环境和应用程序。有许多不同的版本可供选择,包括Ubuntu Desktop、Ubuntu Server、Ubuntu Mate等。要安装Ubantu Linux,您可以通过虚拟机来进行,具体步骤如下: 1. 首先,您需要下载Ubantu Linux的镜像文件。您可以在Ubantu官方网站或其他可靠的下载源上找到镜像文件。 2. 接下来,您需要创建一个虚拟机,并配置镜像文件。打开虚拟机软件,如VMware Workstation或VirtualBox,然后选择新建虚拟机。 3. 在创建虚拟机的过程中,您需要指定虚拟机的操作系统类型和版本。选择Linux作为操作系统类型,并选择适当的Ubantu版本。 4. 在配置虚拟机的硬件设置时,您需要为虚拟机分配足够的内存、处理器和硬盘空间。确保为虚拟机提供足够的资源以获得良好的性能。 5. 在虚拟机配置完成后,您需要将下载的Ubantu镜像文件加载到虚拟机中。在虚拟机设置中找到CD/DVD选项,并选择下载的镜像文件路径。 6. 完成虚拟机的设置后,您可以启动虚拟机,并按照屏幕上的指示进行Ubantu Linux的安装。按照安装向导的步骤选择语言、时区、键盘布局等选项。 7. 在安装完成后,您将能够登录到Ubantu Linux系统,并开始使用它的功能和应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值