gpt4 book ai didi

c# - 这段代码是线程安全的吗?

转载 作者:太空宇宙 更新时间:2023-11-03 18:48:08 27 4
gpt4 key购买 nike

我有一个具有多个属性的类。在每次值更新时,都会调用一个 Store 方法来存储所有字段(在一个文件中)。

private int _Prop1;
public int Prop1 {
get {
return _Prop1;
}
set {
_Prop1 = value;
Store();
}
}

// more similar properties here...

private XmlSerializer _Ser = new ...;
private void Store()
{
lock (_Ser) {
using (FileStream fs = new ...) {
_Ser.Serialize (fs, this);
}
}
}

这个设计是线程安全的吗?

(顺便说一句,如果您能想到更合适的标题,请随意编辑。)

我认为它是线程安全的。如果在多个线程上更改属性,值将以随机顺序设置,原子存储将以随机顺序发生,但最后,每个属性都会有其最新值,并且在最后,发生原子存储,确保文件是最新的。

说明:属性不会经常设置,但可以同时设置。重要的是在大多数情况下拥有有效的文件。

如果线程要更改与属性值相关的属性,它必须锁定整个对象以与其他线程同步。这与在枚举上锁定 List 基本相同,并且不是此类的责任。

最佳答案

这取决于您在不同线程上调用的内容。

如果您同时在不同的线程上设置属性,则它不是线程安全的,因为属性在序列化时可能会发生变化。

关于c# - 这段代码是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2574993/

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