判断一个函数是否可重入的方法是分析它做了什么。
它不会访问全局变量,除非对这些全局变量的操作是原子的(例如,无法同时读取和修改全局变量)。这通常意味着避免使用全局变量,或保证对它们的同步访问 - 例如,修改和读取全局变量的所有代码在完成之前都持有互斥锁,因此操作是序列化的。
该代码不能自修改(幸运的是,自修改代码在标准 C 或 C++ 中相对较少)。
它不调用其他可重入的函数(其中包括标准库中的相当数量的函数)或程序(例如,多处理通常使确保可重入所需的控制复杂化)。
我不知道有任何特定工具可以分析函数以确定可重入性。通常,函数被设计为可重入(或不可重入)。在实践中,如果没有文档说明某个函数被设计为可重入的,那么可以合理地打赌它是不可重入的。