不可重入函数:如果函数在不同的地方/时序进行调用,会对函数的功能逻辑造成影响
可重入函数:不管怎么调用都不会对函数内部功能/程序逻辑造成影响(局部变量)
下面具体演示:
1 | /* |
运行程序时输入Ctrl+C,发现出现下边的情况:
这是为什么呢?图解如下:
不可重入函数的要点(什么函数是不可重入函数):
1.函数内部包含有对全局性变量的修改操作
2.函数传参的参数跟其他地方共同使用同一个变量
因为这些对全局变量的操作不是原子性的,因此这些修改操作有可能同时在不同地方进行修改
一个函数是否可重入:
1.是否对全局性的数据进行修改操作(malloc是用全局链表来管理堆的)
2.这个操作是否是原子性的