可重入函数和不可重入函数
场景:
正在进行节点的头插,节点的头插有两步:p->next=head; head=p
如果在进行第一步p->next=head时进程收到信号,并且该信号被自定义捕捉,其自定义函数也是节点头插,就会出现如下情况:
node1节点头插第一步完成,此时收到被自定义捕捉的信号,进行node2节点头插,信号处理完成后重新回到node1节点头插未完成的部分head=p,此时node1节点成为头节点,而node2节点丢失,发生内存泄漏。
这种现象叫做insert函数被重入,而insert函数就叫做不可重入函数。对于不会发生上述情况的函数就叫做可重入函数。
可重入函数和不可重入函数是函数的一种特征,并非优缺点,C++中的大部分常用函数都为不可重入函数。