如何查找函数是否可重入

时间:2015-04-23 13:11:33

标签: c++ c linux gdb

我正在尝试使用开源库中的函数。默认情况下这个函数没有暴露在外面(所以我假设它不是开源库直接提供的实用函数),但我需要这个函数来解决我的代码中的一些问题,所以不知何故我在makefile中做了一些更改来暴露来自图书馆的功能。

现在的问题是如何确保这个功能是可重入的。

我无法用肉眼发现,因为它在内部调用了许多功能。

准确地说,我很想知道是否有任何可用的工具或GDB中的任何选项来检查我的函数是否仅使用局部变量而且它没有改变全局变量。

1 个答案:

答案 0 :(得分:1)

确定函数是否可重入的方法是分析它的作用。

1)除非对这些全局变量的操作是原子的(例如,无法同时读取和修改全局变量),否则它不会访问全局变量。这通常意味着避免使用全局变量或保证对它们的同步访问 - 例如修改和读取全局的所有代码都会保留互斥锁,直到完成为止,因此操作将被序列化。或编码

2)代码不能自我修改(幸运的是,自修改代码在标准C或C ++中相对较少)。

3)它不会调用其他不是可重入函数的函数(包括标准库中的相当多的函数)或程序(例如,多处理通常会使确保重入的控制变得复杂)。

我不知道有任何特定的工具来分析确定重入的函数。通常,函数被设计为可重入(或不可重入)。在实践中,如果没有文档说某个函数被设计为可重入,那么可以肯定它是不可重入的。