当前位置: 技术问答>linux和unix
大家建议一下这个线程相关现象的解决方案吧
来源: 互联网 发布时间:2016-05-06
本文导语: 1. 结果: 约5个小时后,进程异常退出; 2. 测试过程: 一个进程里开了十几个线程,利用消息队列在线程间进行大量的密集通信; 3. 分析: 3.1 可以排除的原因: 堆分配后没有释放 3.2 怀疑的原因: 某线程在数...
1. 结果:
约5个小时后,进程异常退出;
2. 测试过程:
一个进程里开了十几个线程,利用消息队列在线程间进行大量的密集通信;
3. 分析:
3.1 可以排除的原因:
堆分配后没有释放
3.2 怀疑的原因:
某线程在数组操作时越界,影响到其他线程并使其退出(因为注释频繁调用system API的代码后,进程基本上正常了);
只要任意线程中有一个bug,在这样的测试中,进程便会异常退出;
4. 采取的措施:
4.1 仔细检查了代码;
4.2 尝试多次注释了一些代码;
4.3 因为大部分的线程之间有某些依赖,所以不方便把他们分开成独立进程;
4.4 反复调用了某些线程的某些相关接口;
约5个小时后,进程异常退出;
2. 测试过程:
一个进程里开了十几个线程,利用消息队列在线程间进行大量的密集通信;
3. 分析:
3.1 可以排除的原因:
堆分配后没有释放
3.2 怀疑的原因:
某线程在数组操作时越界,影响到其他线程并使其退出(因为注释频繁调用system API的代码后,进程基本上正常了);
只要任意线程中有一个bug,在这样的测试中,进程便会异常退出;
4. 采取的措施:
4.1 仔细检查了代码;
4.2 尝试多次注释了一些代码;
4.3 因为大部分的线程之间有某些依赖,所以不方便把他们分开成独立进程;
4.4 反复调用了某些线程的某些相关接口;
|
让程序退出的时候生成core文件,然后用gdb分析一下倒底在哪一个系统调用的时候死了, 后面再做进一步的分析.
|
有些统调用和C库接口就是不可重入的,这就是为什么有进程安全,线程安全一说的原因。
|
2楼的办法实在。
|
很可能是消息队列引起的。
如果进行频繁的数据通信,还是使用信号进行同步比较好,消息队列效率是很低的。
如果进行频繁的数据通信,还是使用信号进行同步比较好,消息队列效率是很低的。
|
只要任意线程中有一个bug,在这样的测试中,进程便会异常退出
|
有没有可能存在重入问题,临界区数据没有保护好的?
我认为未必是系统API的问题。
我认为未必是系统API的问题。
|
数组越界不是有很多工具就可以查吗? 可以先试一下看看。
另外线程之间可以不用消息队列啊。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。