gpt4 book ai didi

multithreading - 代码重入与线程安全

转载 作者:行者123 更新时间:2023-12-03 10:27:40 26 4
gpt4 key购买 nike

的概念有什么区别《代码重入》 《线程安全》 ?根据下面提到的链接,一段代码可以是它们中的任何一个,它们都可以,也可以都不是。

Reentrant and Thread safe code

我无法清楚地理解解释。帮助将不胜感激。

最佳答案

可重入代码在单个点中没有状态。您可以在代码中执行某些操作时调用代码。如果代码使用全局状态,可以想象一个调用可以覆盖全局状态,从而破坏另一个调用中的计算。

线程安全代码是没有竞争条件或其他并发问题的代码。竞争条件是两个线程做某事的顺序影响计算的地方。一个典型的并发问题是对共享数据结构的更改可以部分完成并处于不一致状态。为了避免这种情况,您必须使用并发控制机制,例如互斥体的信号量,以确保在操作完成之前没有其他任何东西可以访问数据结构。

例如,一段代码可以是不可重入但线程安全的,如果它由互斥锁在外部保护,但仍然具有全局数据结构,其中状态必须在整个调用持续时间内保持一致。在这种情况下,同一线程可以在仍受外部粗粒度互斥锁保护的情况下启动对过程的回调。如果回调发生在非可重入过程中,则调用可能会使数据结构处于从调用者的角度可能破坏计算的状态。

一段代码可以重入但非线程安全,如果它可以对共享(和可共享)数据结构进行非原子更改,该更改可以在更新过程中中断,从而使数据结构处于不一致状态.在这种情况下,访问数据结构的另一个线程可能会受到半更改数据结构的影响,并且要么崩溃,要么执行破坏数据的操作。

关于multithreading - 代码重入与线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/352365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com