问题描述:
在一个冰淇淋店中 主要有老板,店员,收银员,以及顾客四个角色 这里用多线程来模拟他们之间的交互关系,并用伪代码描述
主要流程:
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); //创建收银员线程,无参