可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。
线程安全是指多个线程调用同一个函数,如果是线程安全的,那么每次的结果都是正确。
可重入函数是指函数内部没有使用共享变量。
可重入函数是线程安全函数的一个真子集。
下面一个函数就是线程安全但却不可重入的
static int *sharedID;
int* threadsafe_getID( char* name )
{
int *unsharedID;
P( &mutex );
sharedID = notThreadsafe_getID( name );
unsharedID = sharedID;
V( & mutex);
return unsharedID;
}
上面的函数通过P、V操作封装得到一个线程安全函数,却不是可重入函数。