编程范式 18 冰淇淋商店
来源:互联网 发布:csharp与java 编辑:程序博客网 时间:2024/04/28 10:12
clerks
40 cones
10 customers 每人吃1-4个冰淇淋 FIFO
manager不同意要重做 同时只能有一个clerk和manager见面
cashier
需要四类线程
- manager
- clerks
- customers
- cashier
int main(){ int totalCones=0; InitThreadPackage(); SetupSemaphores(); for(int i=0;i<10;i++) { int numCones=RandomInteger(1,1); ThreadNew(,Customer,1,numCunstomers); totalCones+=numCones; } ThreadNew(,Cashier,0); ThreadNew(,Manager,1,totalCones); RunAllThreads(); FreeSemaphores(); return 0;}
struct inspection{ bool passed;//false Semaphore requested;//0 Semaphore finished;//0 Semphore lock;//1}
void Manager(int totalConesNeeded){ int numApproved=0; int numInsected=0; while(numApproved<totalConesNeeded) { sw(inspection<requested); numINspected++; inspection.passed=Random(1,0) //50%概率通过 if(inspection.passed) { numApproved++; } ss(inspected.finished); }}
void clerk(Semaphore semaToSignal){ bool passed=false; while(!passed) { MakeCone(); sw(inspection.lock);//semaphore wait ss(inspection.requested);//semaphore signal sw(inspection.finished); passed=inspection.passed; ss(inspection.lock); } ss(semaToSignal);}
void Customer(int numCones){ Brow X();//等店员做完 Samphore clerkDone; for(int i=0;i<numCones;i++) { TN(,1,clerkDone);//ThreadNew } for(int i=0;i<numCones;i++) { sw(clerksDone); } SemaphoreFree(clerksDone); WalkToCashier(); ss(line.requested); sw(line.lock); int place=line.number++; ss(line.lock); ss(line.requested); sw(line.customers[place]);}
struct line{ int number;//0 Semaphore requested;//0 Semaphore Customers[10]; Semaphore lock;//1}
void Cashier(){ for(int i=0;i<10;i++) { sw(line.requested); checkout(i); semaphore line(customers[i]); }}
阅读全文
0 0
- 编程范式 18 冰淇淋商店
- 编程范式
- 编程范式
- 编程范式
- 编程范式
- 编程范式
- 编程范式
- 编程范式[paradigm]
- 编程范式的示意图
- C++的编程范式
- C++的编程范式
- 编程语言范式
- 编程范式学习笔记
- jQuery 中的编程范式
- C++编程范式
- 【编程范式12】
- 编程范式16
- jQuery中的编程范式
- bzoj3489: A simple rmq problem
- 一点一点学线程(一)线程基础
- SQL Server2008r2安装配置
- 多柱汉诺塔最优算法设计探究
- Windows 7下Git SSH 创建Key的步骤(by 星空武哥)
- 编程范式 18 冰淇淋商店
- js ajax 异步 同步 区别
- LSTM简介以及数学推导(FULL BPTT)
- 第二周项目一 顺序表的基本运算
- 解决-Glide preload()的一个坑
- win10 ctrl+alt+上下键 旋转禁用
- java小项目,租车系统
- SQL的四种连接-左外连接、右外连接、内连接、全连接
- ActionBar颜色种种