线程安全和可重入函数之间的区别和联系
概念
重入:即重复调用,函数被不同的流调用,有可能会出现第一次调用还没返回时就再次进入该函数开始下一次调用。
可重入:当程序被多个线程反复执行,产生的结果正确。
如果一个函数只访问自己的局部变量或参数,称为可重入函数。
不可重入:当程序被多个线程反复调用,产生的结果出错。
当函数访问一个全局的变量或者参数时,有可能因为重入而造成混乱,像这样的函数称为不可重入函数。
线性安全:一般来说,一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。
可重入函数与线程安全的区别与联系
(1)线程安全是在多个线程情况下引发的,而可重入函数可以在只有一个线程的情况下来说。
(2)线程安全不一定是可重入的,而可重入函数则一定是线程安全的。
(3)如果一个函数中有全局变量,那么这个函数既不是线程安全也不是可重入的。
(4)如果将对临界资源的访问加上锁,则这个函数是线程安全的,但如果这个重入函数若锁还未释放则会产生死锁,因此是不可重入的。
(5)线程安全函数能够使不同的线程访问同一块地址空间,而可重入函数要求不同的执行流对数据的操作互不影响使结果是相同的。