多线程访问导致崩溃一例

简介: 多线程访问导致崩溃一例

开发的系统,过一会就嗝屁。这怎么查?


 昨天整合同事的功能,结果一跑就崩溃。查下来是传递的缓冲区为空,确认了一下调用之前也确实是空。可是吾代码有专门的线程锁,执行之后才释放,怎么是空呢?被谁释放了?


 今天赶到公司,认真查了半天。经过分析,找到了出错原因。总结如下:


 简要流程:


 线程1构建一个源对象1,把数据复制在缓冲区中;


 新建对象2,保存对象1的所有信息,将对象2加入到队列1;


 线程2将队列1复制到队列2,然后执行。



 听起来没什么破绽,有几个坑:


 1、复制的源对象,不能跟其他代码共用。


 2、队列1的对象(含缓冲区)要自行建立,不能与源相同。否则源一释放就完蛋了。


 3、队列2的对象,不能使用队列1的对象(指针),必须是自己建立。否则在线程1修改对象时,线程2访问,必然出错。缓冲区可以使用共用,因为线程1新建后放入队列,没有其他使用方。


 4、线程2注意正确释放缓冲区内存。



 现在就很稳定了。只是CUDA的内存释放还有问题,不过这个目前管不了。  


目录
相关文章
多线程-同步代码块中的隐患及解决办法
多线程-同步代码块中的隐患及解决办法
55 0
|
4月前
|
Java 调度
【多线程面试题 四】、 线程是否可以重复启动,会有什么后果?
线程不能被重复启动,一旦调用start()方法后,线程将从新建状态进入就绪状态,再次调用start()会抛出IllegalThreadStateException异常。
|
7月前
|
监控 Java 测试技术
在多线程开发中,线程死循环可能导致系统资源耗尽,影响应用性能和稳定性
【5月更文挑战第16天】在多线程开发中,线程死循环可能导致系统资源耗尽,影响应用性能和稳定性。为解决这一问题,建议通过日志记录、线程监控工具和堆栈跟踪来定位死循环;处理时,及时终止线程、清理资源并添加错误处理机制;编码阶段要避免无限循环,正确使用同步互斥,进行代码审查和测试,以降低风险。
99 3
|
Java 编译器 应用服务中间件
几行代码就可以把系统高崩溃;
几行代码就可以把系统高崩溃;
97 0
|
安全 C++
c++的queue在多线程下崩溃原因分析
c++的queue在多线程下崩溃原因分析
|
Java 调度 容器
【多线程与高并发】- 线程基础与状态
所谓线程就是操作系统(OS)能够进行运算调度的最小单位,是一个基本的CPU执行单元,也是执行程序流的最小单元。能够提高OS的并发性能,减小程序在并发执行时所付出的时空开销。线程是进程的一个实体,是被系统独立调度和分派的基本单位。
145 0
【多线程与高并发】- 线程基础与状态
|
并行计算
多线程访问导致崩溃一例
多线程访问导致崩溃一例
143 0
使用lockf()保证应用单进程
使用lockf()保证应用单进程
128 0