当谈及可重入函数与线性安全的区别与关系时,先说一下可重入函数与线性安全它们各自的概念。
1、什么是可重入函数?
一个函数被不同控制流调用,有可能在第一次调用还没返回时就再次进入该函数,这称为重入;
如果一个函数只访问自己的局部变量或参数,则可称为可重入函数;
2、线性安全
多个线程访问时,采用了枷锁机制,当一个线程访问该类的某个数据时,进行保护,其他进程不能进行访问直到该进程读取完,其它线程才可使用,不会出现数据不一致或者数据污染;
不提供数据访问保护,有可能出现多个线程先后更改数据造成,所得到的数据是脏数据;
3.可重入函数与线性安全的区别与关系
1)线程安全是在多个线程情况下引发的,而可重入函数可以在只有一个线程的情况下来说;
2)线程安全不一定是可重入的,而可重入函数则一定是线程安全的;
3)如果一个函数中有全局变量,那么这个函数既不是线程安全也不是可重入的;
4)如果将对临界资源的访问加上锁,则这个函数线程安全的;但如果这个重入函数若加锁未释放则会产生死锁,因此是不可重入的;
5)线程安全函数能够是不同的线程访问同一块地址空间,而可重入函数要求不同的执行流对数据的操作互不影响,使结果是相同的;
6)如果一个函数当中全是自身占栈空间的,那么既是线程安全又是可重入的