3、嵌入式Linux终端软件中的线程安全性问题

  线程中隐藏的一个问题是他们可能会调用非线程安全的库函数,这样可能会产生错误的结果,如果多个线程能够同时执行函数的多个活动请求而不会相互干扰,那么这个函数是线程安全的(thread-safe)。POSIX规定了非线程安全的函数如下,这些函数一定要有一个以后缀_r表示对应的线程安全版本函数。(如图1)

  既然上述函数不是线程安全函数的,那么我们必须对代码中这样的函数调用进行专项审查,通过搜索,函数查找等方法进行逐项排查,确保多线程执行的程序代码中不存在非线程安全的函数调用。实际上这样的问题,在实际应用多次出现,并且问题的定位和解决困扰了开发人员很长时间,在嵌入式Linux终端软件代码审查时,我们需要汲取这样的经验教训。

  4、代码审查工具的使用

  4.1 使用改进后的Pc-Lint审查工具对整个软件工程进行全面审查

  PC-Lint是一种C/C++软件代码静态分析工具,借助PC-Lint可以对整个软件工程的代码进行批量检测,根据输出的检查结果,分析代码中潜在的问题隐患。目前,在我们的代码审查工作中,已经大面积的在使用Pc-Lint,通过实际的工作,Pc-Lint还是存在一些不足,比如在检查之前要进行大批量的命令行输入,后的审查结果以文本格式输出,没有进行分类汇总,针对这些问题,我们使用VBA编程技术,将Excel和Pc-Lint结合起来使用,收到了很好的效果。

  我们将PC-Lint内嵌至Excel中,并设计了一个简单的操作界面,将参数设置,选项设置,待检查文件写入全部集中于一个操作界面中。在启动宏时,同时启动PC-Lint,可以避免大量的手动输入,并使检查结果自动分类,如图2所示:

  在检查完成后,检查结果以电子表格的形式输出,并且已经进行了分类汇总,在输出的检查结果中,各类代码问题按照不同模块,不同文件排列出来,还给出了出现问题的行号,问题类型,以及详细的错误信息,这样一来,程序员可以快速定位到发生错误的地方,及时加以纠正,而且便于分类汇总,统计分析。

  4.2 使用beyond compare工具对代码修改进行有针对性的审查

  终端软件在日常开发并修改后,通过CVS代码管理系统提交到服务器,修改内容可以通过CVSTRAC网页工具进行查看,相关修改信息一目了然,这对于每日代码修改的审查提供了很大的方便,然而,借助专业代码比较工具beyond compare,可以对不同版本代码进行深入细致比对,并对修改部分进行重点审查,确保修改能够真正满足要求,如图3所示:

  在beyond compare工具的比对窗口中,红色部分表示此次修改的内容,测试人员由此可以迅速的定位到代码的修改部分进行重点审查,大大的提高了效率,降低了工作量。

  5、结语

  本文结合多年来对嵌入式Linux软件代码的审查经验,总结了在代码审查过程中发现的一些常见问题,并针对终端软件代码多线程编程的特点,根据实践经验,对线程安全性问题进行了分析,后介绍了根据实际需要进行了改进的Pc-Lint检查工具和beyond compare工具的使用,因此,本文对基于嵌入式Linux的抄表终端软件的代码审查具有一定的借鉴和指导意义。