线程内核对象的释放问题
2011-12-02 15:31
176 查看
前两天开会,谈到最近开发的一些经验和心得,领到讲了一个最近压力测试发现的问题,我觉得比较有代表性,和大家分享一下。要求写一个服务端控制程序,去控制设备,然后用别人的客户端去控制服务端,协议是统一的,因此不会出现控制不上的问题,用压力测试工具长时间测试时,发现异常。经定位是内核对象句柄数超量的情况,导致程序蹦掉。查找了下关于句柄的操作和处理,发现原来是线程内核对象没有正常释放的问题,当我们_beginthreadex创建一个i线程的时候,系统为我们创建了一个线程内核对象,并且复制了一个句柄到我们的进程中,因此,调用完成之后,实际上该线程的内核对象计数器的值为2,当我们完成任务后,线程退出,这个时候计数器的值只是减1,因此,任务完成后,线程内核对象并没有被回收,因此,压力测试时,不断的开始,停止,导致资源泄漏,达到一定程序,程序就蹦了,因此,在停止时我们必须显示的调用CloseHandle减少计数器,以保证资源能正确释放。这样该问题就得到解决。
相关文章推荐
- 线程、进程内核对象引用计数问题
- 线程、进程内核对象引用计数问题
- Java线程并发干扰问题及解决方式(锁对象)
- Java线程(八):锁对象Lock-同步问题更完美的处理方式
- Java中的对象释放问题
- Apache Email 遇到的线程释放慢问题
- Java线程 锁对象Lock-同步问题比sychronized更完美的处理方式
- Java线程问题:当一个目标对象被多个线程共享时候
- 同一线程多次创建 的 线程资源释放问题在每个线程的一开始,用pthred_detach(pthread_self())来使自己detach掉
- python类中显示重写__del__方法,引起循环引用的对象无法释放,造成垃圾泄露问题
- Windows编程--线程和内核对象的同步-事件内核对象
- linux内核相关的两个问题(杀死init和内核结构的释放)
- 可以将线程内核对象视为由关于线程的统计信 息组成的一个小型数据结构
- 第九章 线程与内核对象的同步(3)
- [案例ANR]媒体播放器操作线程与资源释放问题
- Java线程并发干扰问题及解决方式(锁对象)
- 因文件对象未释放导致文件无法删除问题处理或访问
- Java线程(八):锁对象Lock-同步问题更完美的处理方式
- unity lua C# 这边 new 了一个GameObject 对象并发给Lua那边, 这时C# 这边在通过GC释放掉这个对象;lua 那边会报错;遇到这种问题的解决方案
- Windows编程那些事----线程与内核对象同步之【信标对象】