可重入和非可重入函数

要解释可重入函数是何物必须先分清楚单线程程序和多线程程序,典型的UNIX程序都是一个线程贯穿程序始终,cpu围绕单条执行逻辑来处理,对于多线程程序则是,同一进程却存在多条独立并发的执行逻辑。

信号处理器函数因为使用了信号处理器函数可能会在任一时间点异步中断程序的执行逻辑,从而在同一进程中存在两条(即主程序和信号处理函数)独立(但不是并发)的执行线程。

可重入函数:
如果同一程序的多个线程可以同时安全的调用某一个函数,那么该函数就是可重入函数。
此处“安全”的意思是,其他线程无论调用该函数的状态如何都可产生预期结果
不可重入函数:
如果在同一个程序中多个线程不能够安全的调用某一个函数,那么这个函数就是不可重入函数

更新全局变量或者静态数据结构可能是不可重入函数

malloc函数族为不可重入函数,因为malloc和free函数维护了一个针对以释放内存块的链表,如果重新在堆上分配内存可能破坏链表结构

printf,scanf也为不可重入函数,因为他们会为缓冲区I/O更新数据结构

猜你喜欢

转载自blog.csdn.net/len_yue_mo_fu/article/details/83996983