在C语言中,我知道递归函数,但听说过重入函数,那是什么?它们之间有什么区别?

最佳答案

如果一个函数支持同时“通过”多个执行线程,则该函数是可重入的。这可能是由于实际的多线程,并且我在下面使用了这种情况,或者是由于其他发布者指出的其他情况。多线程是第一个想到的,也许也是最容易理解的,所以我专注于这种情况。

这意味着该函数不能使用静态的“全局”数据,因为该数据随后将被两个(或多个)线程并行访问,这通常会令人震惊。重入函数通常具有一个显式参数来保存任何特定于调用的状态,而不是静态地存储它。
strtok()是C标准库中函数的经典案例,众所周知该函数不可重入。

[编辑]:评论中有很多见解,澄清和更正,因此也请阅读!谢谢大家的帮助。

08-26 09:20