多线程模拟冰淇淋店售货问题

问题描述:     在一个冰淇淋店中 主要有老板,店员,收银员,以及顾客四个角色 这里用多线程来模拟他们之间的交互关系,并用伪代码描述     主要流程:          10个顾客到冰淇淋店买冰淇淋,假设每个顾客需要买1到4个冰淇淋,对于新需求的每个冰淇淋,该店都会新分配一个店员来制作,也就是店里此时一共有10到40个店员制作冰淇淋。当店员将冰淇淋制作完成后,先到老板办公室交给老板
摘要由CSDN通过智能技术生成
问题描述:
     在一个冰淇淋店中 主要有老板,店员,收银员,以及顾客四个角色 这里用多线程来模拟他们之间的交互关系,并用伪代码描述
     主要流程:
          10个顾客到冰淇淋店买冰淇淋,假设每个顾客需要买1到4个冰淇淋,对于新需求的每个冰淇淋,该店都会新分配一个店员来制作,也就是店里此时一共有10到40个店员制作冰淇淋。当店员将冰淇淋制作完成后,先到老板办公室交给老板审核,如果审核不通过,则重做,审核通过再交给顾客,顾客拿到冰淇淋后到收银员处排队结帐。

     交互约束:
          1.老板办公室最多只能一个店员进入,不可同时进入两个店员
          2.老板对顾客需求的所有冰淇淋审核完成后才能离开
          2.顾客拿到冰淇淋到收银员那去排队交钱时,必须满足FIFO性质

     分析及实现:
          主函数:创建10个顾客线程 并且模拟产生冰淇淋总需求个数,用于创建店员和老板审核
                  这里并没有创建店员线程 因为店员线程虽然一共有TotalNeeds个,可以在main中创建,但是放在顾客线程中更合逻辑,因为店员是为了满足顾客需求而产生并工作的
          #define NUM_CUSTOM 10

          void main()
          {
               int TotalNeeds = 0;
               for(int i=0; i<NUM_CUSTOM; i++)
               {
                    int num = Random(1...4);
                    ThreadNew(...Customer, 1, num);//创建顾客线程并传入其模拟购买的冰淇淋数
                    TotalNeeds += num; 
               }
               ThreadNew(...Manager, 1, TotalNeeds);//创建老板线程传入总需求冰淇淋数
               ThreadNew(...Cashier, 0);            //创建收银员线程,无参
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值