重入和线程安全功能之间的区别

时间:2010-02-17 06:49:29

标签: c multithreading

重入函数和线程安全函数之间有什么区别?

3 个答案:

答案 0 :(得分:2)

可重入意味着没有全局状态(仅限本地)。

线程安全意味着2个(或更多)线程不可能相互冲突(通过写入冲突的值)。

答案 1 :(得分:2)

  
      
  • 可以从多个同时调用线程安全函数   线程,即使调用使用共享数据,因为所有   对序列化的共享数据的引用。

  •   
  • 可重入函数可以   也可以从多个线程同时调用,但仅限于每个线程   调用使用自己的数据。

  •   
     

因此,线程安全函数始终是可重入的,但是是可重入的   函数并不总是线程安全的。

可以通过示例来区分差异,

  

如果可以调用其成员函数,则称该类是可重入的   安全地从多个线程,只要每个线程使用不同的   班级的实例。如果它的成员,该类是线程安全的   可以从多个线程安全地调用函数,即使所有函数都是如此   线程使用该类的相同实例。

来源:Qt

答案 2 :(得分:1)

您是否检查了wiki article on the subject。它解释得很好,请参阅完整的讨论。

文章中的一些相关内容:

  

在计算中,如果计算机程序或子程序可以在执行过程中被中断,则称为可重入,然后在其先前的调用完成执行之前再次安全地调用(“重新输入”)。中断可能是由内部操作(如跳转或调用)或外部操作(如硬件中断或信号)引起的。重新进入的调用完成后,之前的调用将恢复正确执行。

  

这种重入的定义不同于多线程环境中的线程安全性。重入子例程可以实现线程安全,但单独重入可能不足以在所有情况下都是线程安全的。相反,线程安全代码不一定必须是可重入的(参见下面的示例)。