线程池

今天 按照老师的要求写了一下线程池 对多线程 的理解 又加深了一步

只要运用了 几个函数

InterlockedIncrement(&pThis->_ThreadNum);//线程互斥加1 计数 对线程的 数量监控

InterlockedDecrement(&pThis->_ThreadNum);//减1


InterlockedIncrement(&pThis->_RunThreadNum);//加1

InterlockedDecrement(&pThis->_RunThreadNum);//减1 //对线程 执行 监控


外加 自己写了一个线程锁的类 


建立 俩个 工作单位 

一个是数据 锁

一个单纯的执行锁


 当然 这些好不够 需要 加入3个信号 

开始执行 信号

和 结束 信号

和关闭信号

开始信号 给入后 执行 线程

结束信号 给入后  停止执行线程

关闭信号给入  退出所有执行

信号函数 

handle =createEvent(0,false,false,0);

第一个参数课不看

第2个参数为 false 自动 true 为手动  ResetEvent();//进行重置否则一直处于当前状态   false 为 setEvent 设置信号

第3参数 表示为是否有信号

后面参数课不看


在加入 等待函数 降低CPU 耗损

waitForMultipleObject();  信号数组count 信号指针  是否  false 一单有信号就给出线程 工作 true 为所有线程通知  4 为等待时间

返回值  

WAIT_OBJECT_0 成功了 WAIT_OBJECT_0+1表示 数组下标1

返回值是WAIT_OBJECT_0与(WAIT_OBJECT_0 + dwCount-1)之间的一个值。换句话说,如果返回值不是WAIT_TIMEOUT,也不是WAIT_FAILED,那么应该从返回值中减去WAIT_OBJECT_0

分析到这 做线程池不难了 

这里需要加俩个list stl 已经帮我做好了 且stl 初始化本身就是会自动申请一片内存池

此时我们只要将 动态的申请一个执行的结构 内存

当执行这个点完成时

将此时这个list点 移到第2个list 第一个 ease(it)就是了

如果又有信号进来了 此时 第一个为空 第2个不为空 讲第2个的内存get第一个 第2个 ease(it)

如果 又有信号来了第2个为空 那么 第一个 申请内存

当第一个list 有一个信号 执行完毕后 讲内存给第2个list 

就这样来回倒动 

竟可能的 不重复dele new 这样会造成 内存碎片 切系统容易崩溃 做不到长久


以上几点做好 理论上就完成了一个  完美的 池 面 作为服务器 基本够用

轻松加愉快


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值