barber event 设计
来源:互联网 发布:淘宝助理怎么改尺寸 编辑:程序博客网 时间:2024/05/16 04:50
Window process
客人上门 -> CUSTOMER_EVENT(Auto Reset) FALSE 一开始OFF =FALSE
关门->CLOSE_EVENT(Manuel Reset) TRUE 一开始OFF=FALSE
Console process
BARBER_NUM 3
BENCH_SIZE 10
g_nBench[BENCH_SIZE]
CRITICAL_SECTION g_cs
main thread
1,create 3 barber thread, g_cs, 清空 g_nBench, CUSTOMER_EVENT, CLOSE_EVENT, SEMAPHORE
customerID=0
2.等待 CUSTOMER_EVENT 跟CLOSE_EVENT
2.1 CLOSE_EVENT
2.1.1 把g_nBench 清空 要用g_cs保护起来
(Bench上的客人反正还没开始剪头发 可以直接离开)
2.1.2 等待3个barber threads 结束
2.1.3关门
2.2CUSTOMER_EVENT;
customerID++;
2.2.1 检查 bench是否还有位置 如果bench满了
=> 让客人直接离开
2.2.2 bench 还有位置
=> 把客人放到bench最后面(要用g_cs保护起来)
=> ReleaseSemaphore(+1)
barber thread
1.等待CLOSE_EVENT 跟SEMAPHORE
1.1 CLOSE_EVENT
=> Barber 下班离开 thread 结束
1.2 SEMAPHORE
1.2.1 从bench拉出第一,(如果这个人不是empty的话)修改bench(要用g_cs保护起来)
1.2.2 开始剪头发(sleep 4s)
1.2.3 剪头发完毕
-----------------------------------------------------------------------------------------------------------------------------------------
Initial Dialog:
g_hCustomer = CreateEvent(NULL, FALSE, FALSE, CUSTOMER); //OFF AUTO RESET
g_hClose=CreateEvent(NULL, TRUE, FALSE, CLOSE_EVENT);
if(!g_hCustomer || !g_hClose)
return FLASE;
--------------------------------------
Barber Dig OnBnClickOk:
SetEvent(g_hCustomer);
Bar Dig OnBnClikedCancel
SetEvent(g_hClose)
- barber event 设计
- barber
- Event & Network 设计思考
- Sleeping Barber Window版本实现
- baber main thread barber thread
- New Testing 第二期, Scott Barber介绍
- Barber of the Army of Mages
- 事件(event)设计准则(一)
- 事件(event)设计准则(二)
- Event
- Event
- Event
- Event
- Event
- event
- event
- event
- Event
- Java设计模式之普通工厂模式
- sql注入原理2
- 求1+2!+3!+...+20!的和
- H5---基础知识介绍
- 基于矢量切片的电子地图配图(三)配图准备
- barber event 设计
- 21点算法
- HDU1037
- 双系统下Ubuntu 有线无法上网
- 「音视频直播技术」Android下视频H264编码
- Phaser.js教程
- Java练习题3
- 二叉树叶子结点个数和第K层结点的个数
- 【jzoj5350】【NOIP2017提高A组模拟9.7】【陶陶摘苹果】【动态规划】