0
点赞
收藏
分享

微信扫一扫

计算机操作系统吃水果实验

树下的老石头 2022-04-26 阅读 86
c语言

新手敲的,大佬们还是别看了

信号量实验项目: 桌子上有一个能盛得下5个水果的空盘子,爸爸不停地向盘子中放入苹果或者桔子,儿子不停地从盘子中取出桔子享用,女儿不停的从盘子中取出苹果享用。规定三人不能同时从盘子中取放水果。试用信号量实现爸爸、儿子和女儿三个进程间的同步。

要求:

1、写出相应算法及相关说明。

2、必须用程序设计语言实现整个循环进程的模拟。(设计语言不限)

3、对模拟效果进行截图,提交完整的实验报告。

4、在学习通中上传Word 版实验报告附件。

实验代码:

#include<stdio.h>
#include<stdlib.h>

int S = 1;
int applenum = 0;
int orangenum = 0;
int fruitnum = 0;

int main()
{
    ddd();
}

void ddd()
{
    int i = 0;
    while (i<105)
    {
        i++;
        int np = rand()%4;
        if(np == 0 || np ==3)
        {
            father();
        }

        if(np == 1)
        {
            son();
        }
        if(np == 2)
        {
            daughter();
        }
    }
}

//盘子的互斥量
void mutex()
{
    if(S == 1)
    {
        S = S-1;
    }
    else
    {
        ddd();
    }
}
//水果的互斥量
void fruit()
{
    if(fruitnum < 5)
    {
        fruitnum = fruitnum + 1;
    }
    else
    {
        ddd();
    }
}

void fruitapp()
{
    if(applenum>0)
    {
        applenum = applenum - 1;
        fruitnum = fruitnum - 1;
    }
    else
    {
        ddd();
    }
}

void fruitora()
{
    if(orangenum>0)
    {
        orangenum = orangenum - 1;
        fruitnum = fruitnum - 1;
    }
    else
    {
        ddd();
    }
}
//释放盘子的互斥量
void rollmutex()
{
    S = S+1;
}

void rollapp()
{
    applenum = applenum + 1;
}

void rollora()
{
    orangenum = orangenum +1;
}

void father()
{
    fruit();
    mutex();
            int num = rand() % 100 + 1;
            if (num % 2 == 0)
            {
                //放入一个苹果
                printf("\n父亲放入一个苹果到盘子中\n");
                rollapp();
                printf("盘子中水果的数量为%d,其中苹果数量为%d,桔子数量为%d\n",fruitnum,applenum,orangenum);
            }
            else
            {
                //放入一个桔子
                printf("\n父亲放入一个桔子到盘子中\n");
                rollora();
                printf("盘子中水果的数量为%d,其中苹果数量为%d,桔子数量为%d\n",fruitnum,applenum,orangenum);

            }
    rollmutex();
}

void son()
{
    fruitapp();//先申请水果的互斥量,不可与mutex互换
    mutex();
            //取出一个苹果
            printf("\n儿子将苹果从盘子中取出来享用\n");
            printf("盘子中水果的数量为%d,其中苹果数量为%d,桔子数量为%d\n",fruitnum,applenum,orangenum);
    rollmutex();

}

void daughter()
{
    fruitora();
    mutex();
            //取出一个桔子
            printf("\n女儿将桔子从盘子中取出来享用\n");
            printf("盘子中水果的数量为%d,其中苹果数量为%d,桔子数量为%d\n",fruitnum,applenum,orangenum);
    rollmutex();

}

实验效果图:

 

举报

相关推荐

0 条评论