gpt4 book ai didi

language-agnostic - 差异 "conditionally safe"和 "thread safe"

转载 作者:行者123 更新时间:2023-12-04 05:11:18 24 4
gpt4 key购买 nike

我偶然发现了 Wikipedia 上的线程安全文章;它区分了几个安全级别,尤其是:

Thread safe: Implementation is guaranteed to be free of race conditions when accessed by multiple threads simultaneously.
Conditionally safe: Different threads can access different objects simultaneously, and access to shared data is protected from race conditions.



但对我来说,这两个定义看起来像是用不同的方式来表达同一件事。两者都保证共享数据没有竞争条件。

有人可以解释其中的区别吗?谢谢。

最佳答案

您应该明白,在这两种情况下,共享数据不是一回事。

线程安全 谈论从多个线程访问单个实例。因此,如果通过公共(public)方法访问,共享数据可能是该类的任何成员。它不在实例之间共享(因为只有一个),而仅在线程之间共享。

有条件安全谈论访问不同的实例,每个实例都来自自己的线程。数据必须在实例之间共享,因此它只能是聚合成员(可能由依赖注入(inject)提供)、静态成员或(外部)单例。

但是 ,如果您阅读了提到的 Wikipedia 文章 (the Qt one is wrong) 中的所有引文,您就会明白 Wikipedia 甚至可能歪曲了 IBM 的命名。 IBM的条件意味着只有类/API中的一些方法是线程安全的,或者线程安全取决于API无法影响的底层服务(给出一个很好的例子)。线程安全与可重入的 Qt 命名约定似乎更合适,因为它不区分线程共享数据和实例共享数据。

关于language-agnostic - 差异 "conditionally safe"和 "thread safe",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14901803/

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