【问题标题】:Difference between Re-entrant and Thread-Safe function可重入和线程安全函数之间的区别
【发布时间】:2010-02-17 06:49:29
【问题描述】:

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

【问题讨论】:

标签: c multithreading


【解决方案1】:
  • 一个线程安全的函数可以同时从多个 线程,即使调用使用共享数据,因为所有 对共享数据的引用被序列化。

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

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

可以通过示例了解差异,

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

来源:Qt

【讨论】:

    【解决方案2】:

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

    文章中的一些相关内容:

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

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

    【讨论】:

    • 请发布一个总结链接的实际答案,以防它变冷(就像现在和现在一样)。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-20
      • 2013-01-31
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      相关资源
      最近更新 更多