程序调试中遇到的几种问题

1。无限等待signal

 

有线程1和线程2,线程1结束前需要等待线程2发送signal,才能结束。

 

结果线程1还未进入等待signal的时候,线程2已经发送signal完毕,造成线程1无限等待signal,程序陷入死循环。

 

2。相互等待signal

线程1发送消息(往消息队列写入), 线程2接收消息(从消息队列读取),线程3处理消息命令,线程4负责播放状态切换。

 

线程2如果收到消息,发送给线程3,只有线程3处理完毕才能处理下一个消息。

 

线程1的消息有两个来源:键盘输入和应用程序自动发送的。

 

有一条通道是这样的,线程4通知应用程序状态,这时候应用程序会自动发送消息,同时线程4进入等待signal状态。

 

线程1处理应用程序自动发送的消息,但同时键盘快速输入很多消息,线程1的消息队列充满, 需要等待队列清空的mutex,而这时线程4也要等待app给它发送signal,但app也在等待线程4能处理事件,可以得到空队列的mutex。结果相互等待,程序进入死循环。

 

3.处理野指针

线程1负责释放指针,线程2在指针释放之前,将这个指针赋值给一个局部变量。

 

线程1释放指针后,线程2继续使用这个局部变量,而且使用之前没有将释放的指针重新赋值给局部变量,导致程序crash。

 

改进: 线程1和线程2需要对指针进行保护和同步。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值