gpt4 book ai didi

multithreading - 类级属性或变量是线程安全的

转载 作者:行者123 更新时间:2023-12-03 13:22:03 25 4
gpt4 key购买 nike

我总是让这个特定的场景让我担心万年。假设我的类(class)看起来像这样

public class Person {
public Address Address{get;set;}
public string someMethod()
{}
}

我的问题是,我的开发人员同事告诉我,地址类型的地址属性不是线程安全的。

从 Web 请求的角度来看,每个请求都在单独的线程上运行,并且每次
线程在我的业务对象或代码后面处理以下行,例如
var p = new Person();

它在堆上创建一个新的 Person 对象实例,因此请求线程可以访问该实例,除非我在我的应用程序中生成多个线程。

如果我错了,请向我解释为什么我错了以及为什么公共(public)属性(property)(地址)不是线程安全的?

任何帮助都感激不尽。

谢谢。

最佳答案

如果引用您的 Person实例在多个线程之间共享,然后多个线程可能会更改 Address导致竞态条件。但是,除非您将该引用保存在静态字段或 Session(某种全局可访问的位置)中,否则您无需担心。

如果您在代码中创建对对象的引用,如上面所示(var p = new Person();),那么您是完全线程安全的,因为其他线程将无法访问对这些对象的引用,而无需求助于令人讨厌的恶意技巧。

关于multithreading - 类级属性或变量是线程安全的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4277390/

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