重入函数和线程安全函数之间有什么区别?
答案 0 :(得分:2)
可重入意味着没有全局状态(仅限本地)。
线程安全意味着2个(或更多)线程不可能相互冲突(通过写入冲突的值)。
答案 1 :(得分:2)
可以从多个同时调用线程安全函数 线程,即使调用使用共享数据,因为所有 对序列化的共享数据的引用。
可重入函数可以 也可以从多个线程同时调用,但仅限于每个线程 调用使用自己的数据。
因此,线程安全函数始终是可重入的,但是是可重入的 函数并不总是线程安全的。
可以通过示例来区分差异,
如果可以调用其成员函数,则称该类是可重入的 安全地从多个线程,只要每个线程使用不同的 班级的实例。如果它的成员,该类是线程安全的 可以从多个线程安全地调用函数,即使所有函数都是如此 线程使用该类的相同实例。
来源:Qt
答案 2 :(得分:1)
您是否检查了wiki article on the subject。它解释得很好,请参阅完整的讨论。
文章中的一些相关内容:
在计算中,如果计算机程序或子程序可以在执行过程中被中断,则称为可重入,然后在其先前的调用完成执行之前再次安全地调用(“重新输入”)。中断可能是由内部操作(如跳转或调用)或外部操作(如硬件中断或信号)引起的。重新进入的调用完成后,之前的调用将恢复正确执行。
和
这种重入的定义不同于多线程环境中的线程安全性。重入子例程可以实现线程安全,但单独重入可能不足以在所有情况下都是线程安全的。相反,线程安全代码不一定必须是可重入的(参见下面的示例)。