У меня есть класс с несколькими свойствами. При каждом обновлении значения вызывается метод 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
при перечислении, и не входит в этот класс.