时代电子科技集团:
关于可重入和线程安全的说法不一,我更倾向于第一种说法,
举例分析:
void strcpy(char *_tar,char *_src)
{
do
{
*_tar++ = *_src;
}
while ((*_src++)!='\0');
}
这个函数是可重入的,原因是函数不使用任何全局变量或状态,它的操作完全依赖于输入参数_tar和_src,这些输入参数在被不同的线程调用时,在每个线程栈中会完整的保存。
但又不是线程安全的,假设线程1先调用了这个函数,运行到此函数的一半被调度器打断切换到线程2,如果线程2改变了_tar或_src所指向的内存之后的某些数据,那么调度器切换到线程1时,线程1就不会正确执行了,原有的数据被线程2破坏了