You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅含公共Getter的C#类静态实例多线程访问是否安全?

问题:多线程访问静态只读Car实例是否安全?

假设存在一个仅包含无副作用公共Getter的C#类Car,代码如下:

public enum CarType
{
    Hatch,
    SUV,
}

public class Car
{
    public Car(CarType carType, string model, bool isElectric)
    {
        CarType = carType;
        Model = model;
        IsElectric = isElectric;
    }

    public CarType CarType { get; private set; }
    public string Model { get; private set; }
    public bool IsElectric { get; private set; }
}

在另一个C#类中创建该类的静态只读实例:

protected static readonly Car _defaultCar = new Car(CarType.SUV, "123", true);

请问多线程访问该静态实例_defaultCar是否安全?


回答:

是安全的,原因如下:

  • _defaultCar是static readonly字段,C#的CLR会保证静态只读字段的初始化过程是线程安全的,确保所有线程在访问该字段时,它已经完成初始化,且初始化后的状态对所有线程完全可见。
  • Car类属于不可变类型:所有属性的set访问器都是private的,初始化完成后就再也无法修改实例的状态;而且所有公共Getter都没有副作用,仅做状态读取。
  • 对于不可变对象,多线程访问时不会出现竞态条件、脏读等线程安全问题,任何线程读取它的属性都能获取到一致、正确的值。

内容的提问来源于stack exchange,提问作者Moe Sisko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:31:35