몇 가지 속성이있는 클래스가 있습니다. 모든 값 업데이트시 모든 필드를 파일에 저장하는 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);
}
}
}
이 디자인은 스레드로부터 안전한가요?
(당신이 더 적절한 자막을 생각할 수있는 경우에, BTW, 편집 주시기 바랍니다.)을 나는 스레드로부터 안전하다고 생각합니다. 속성이 여러 스레드에서 변경되면 값은 임의의 순서로 설정되고 원자 저장소는 임의의 순서로 발생하지만 결국에는 모든 속성이 최신 값을 갖게되고 결국에는 원자 저장소가 발생합니다. 파일이 최신인지 확인하십시오.
명확화 : 속성은 자주 설정하지 않지만 동시에 설정할 수 있습니다. 중요한 것은 대부분 유효한 파일을 만드는 것입니다.
스레드가 등록 정보 값과 관련하여 등록 정보를 변경하는 경우 다른 스레드와 동기화하려면 전체 객체를 잠 가야합니다. 이것은 기본적으로 열거 형에서 List
의 잠금과 동일하며이 클래스의 책임이 아닙니다.
각 속성 수정 후 변경 내용을 디스크에 저장하는 것은 너무 비효율적입니다. 한 번에 20 개의 속성을 변경하려면 어떻게해야합니까? –
내부 구성 요소이므로 자주 변경되지 않는다는 것을 알고 있습니다. – mafu
"결국 모든 속성은 최신 값을가집니다"; 읽은 값을 정의되지 않은 상태 (예 : 호환되지 않는 값을 갖는 두 개의 속성)로 남겨두고 무언가가 해당 저장소간에 파일을 읽을 수 있습니까? 상점 중 하나가 어떤 이유로 고장 나더라도 똑같은 일이 발생할 수 있습니다. –