maf*_*afu 1 c# locking thread-safety
我有一个有几个属性的课程.在每次更新值时,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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个设计是线程安全的吗?
(顺便说一下,如果你能想到一个更合适的标题,可以随意编辑.)
我认为它是线程安全的.如果在多个线程上更改了属性,则值将按随机顺序设置,原子存储将以随机顺序发生,但最终,每个属性都将具有其最新值,并且最后会发生原子存储,确保文件是最新的.
澄清:属性不会经常设置,但可以同时设置.重要的是大部分时间都有一个有效的文件.
如果线程要根据属性值更改属性,则必须锁定整个对象以与其他线程同步.这与锁定on List枚举基本相同,并不是此类的责任.
| 归档时间: |
|
| 查看次数: |
492 次 |
| 最近记录: |