我正在尝试使用一个开源库中的函数。默认情况下,这个函数不会暴露在外部(所以我假设它不是开源库直接提供的实用函数),但是我需要这个函数来解决我代码中的一些问题,所以我在makefile中做了一些修改,以暴露库中的函数。现在的问题是如何确保这个函数是可重入的。我无法用肉眼发现,因为它在内部调用了许多函数。确切地说,我很好奇GDB中是否有可用的工具或选项来检查我的函数是否只使用了局部变量,而没有改变全局变量。
c2e8gylq1#
判断一个函数是否可重入的方法是分析它做什么。1.它不会访问全局变量,除非对全局变量的操作是原子的(例如,没有办法同时读取和修改全局变量)。这通常意味着避免使用全局变量,或者保证对它们的同步访问-例如,所有修改和读取全局变量的代码在完成之前都持有一个互斥体,因此操作是串行化的。1.代码不会自我修改(幸运的是,自我修改代码在标准C或C++中相对较少)。1.它不调用其他可重入的函数(包括标准库中相当数量的函数)或程序(例如,多处理通常使确保可重入所需的控制复杂化)。我不知道有什么特定的工具可以分析一个函数来确定它是否是可重入的。通常一个函数被设计成可重入的(或不可重入的)。在实践中,如果没有文档说明一个函数被设计成可重入的,那么它很可能不是可重入的。
1条答案
按热度按时间c2e8gylq1#
判断一个函数是否可重入的方法是分析它做什么。
1.它不会访问全局变量,除非对全局变量的操作是原子的(例如,没有办法同时读取和修改全局变量)。这通常意味着避免使用全局变量,或者保证对它们的同步访问-例如,所有修改和读取全局变量的代码在完成之前都持有一个互斥体,因此操作是串行化的。
1.代码不会自我修改(幸运的是,自我修改代码在标准C或C++中相对较少)。
1.它不调用其他可重入的函数(包括标准库中相当数量的函数)或程序(例如,多处理通常使确保可重入所需的控制复杂化)。
我不知道有什么特定的工具可以分析一个函数来确定它是否是可重入的。通常一个函数被设计成可重入的(或不可重入的)。在实践中,如果没有文档说明一个函数被设计成可重入的,那么它很可能不是可重入的。