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