您的位置:首页 > 其它

线程池

2016-04-10 18:54 274 查看
今天 按照老师的要求写了一下线程池 对多线程 的理解 又加深了一步

只要运用了 几个函数

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 这样会造成 内存碎片 切系统容易崩溃 做不到长久

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

轻松加愉快
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: