问题描述:在软件启动过程中,某个线程与其他线程会有数据交互,在代码中会有线程中相互的锁的操作,然后呢此线程在测试过程中发现整个线程会突然挂起几秒什么事情也不干的现象。由于接口是客户提供,调试比较困难,这边提供一些调试后的总结和方法;
1.首先一开始考虑的是否为锁的问题,某一时刻线程在等待锁的获取导致,验证此问题的方法是再开一个线程,然后相隔1s获取一次锁,结果在线程挂起的时候锁的获取是正常的。
2.将挂起的线程主动向后延时,确认是否是和其他线程的交互问题或者什么问题导致的,结果是向后延时后可以不挂起,查看日志发现其日志的不同点是端口linkup的时候会在此时由于线程的一些操作会与其冲突导致。
3.查看是否为串口打印导致的延时,结果将打印通过重定向的方式将信息重定向到文件中,挂起的时间变短,说明挂起时间和串口打印内容太多也有关系(写入文件的操作比较快,打印串口会比较慢)。
重定向链接:https://blog.csdn.net/cao849861802/article/details/84884015
4.处理完上述所有问题后发现还是有两秒左右时间延时,此时的延时时间确认是代码自身的执行时间。