2010-11-26 4 views
0

내 프로그램에 몇 가지 데이터 형식 (int, string 또는 사용자 정의 클래스 개체) 배열과 여러 스레드가 있습니다. 배열이 일부 값으로 초기화 된 후 업데이트되었는지 확인할 수 있어야합니다. 한 가지 아이디어는 배열의 값 해시를 연결하고 배열이 업데이트되었는지 확인해야 할 때마다 해시를 다시 계산하는 것입니다. C++에서이 작업을 수행하는 다른 방법이 있습니까? 또는 마지막으로 확인한 이후 메모리 주소 범위가 업데이트되었는지 확인할 수 있습니까?배열 업데이트를 확인하는 방법

감사

당신이 객체가 수정되었지만 다시 초기 값으로 재설정되는 경우에 대해 걱정하지 않을 경우 해시 방법에만 작동
+0

그것은 너무 많은 것들에 의존 .. 1) 당신이 그것을 수정 코드에 액세스 할 수 있습니까? 그렇지 않은 경우 2) 수정 빈도, 얼마나 자주 수행 할 것인가? 오, 왜 그걸 필요로하니? – ruslik

답변

3

어레이를 필요한 읽기 및 쓰기 작업에 필요한 외관을 제공하는 클래스 템플릿에 캡슐화하고 배열이 dirty으로 표시되면 각 검사마다 dirty 플래그를 재설정하십시오.

이 방법을 여러 리더/라이터 스레드에서 어떻게 신뢰할 수 있는지 잘 모르겠지만 액세스 패턴과 원하는 의미에 따라 달라집니다.

[해시는 항상 충돌 할 수 있기 때문에 해싱이 작동하지 않습니다.]

+0

예, 아마도 좋은 생각입니다. – user352951

+0

보다 정교한 해결책은 이해 관계자 (관찰자)가 배열 데이터 (Observable)에 대한 모든 변경이 즉각적인 통지 (관찰자 패턴)가되도록 콜백을 등록 할 수있게합니다. ike overkill, 다시 여기에서 제한된 정보로 말하기는 어렵습니다. –

+0

고마워, 이것을 구현하려고합니다. – user352951

3

. 이 경우 객체는 "업데이트"되었지만 해시를 사용하여 알 수있는 방법은 없습니다.

또 다른 방법은 업데이트 카운터를 사용하는 것입니다. 개체를 업데이트하고 업데이트 할 때마다 개체를 늘리십시오.

+0

수정되는 개체는 괜찮지 만 동일한 개체로 다시 설정됩니다. Wat는 가능한 모든 데이터 유형에서 작동 할 수있는 좋은 해시 함수가 될 것입니다. 템플릿 기반 해시 함수는 무엇입니까? 또한 업데이트 카운터는 문자열, int 등에서 작동하지 않습니다. – user352951

+0

시퀀스 번호는 좋은 생각입니다 –

+0

@ user352951 : 가능한 모든 데이터 유형에 대해 "좋은 해시 함수"를 작성할 수 없습니다. 어떤 비트가 논리 값에 포함되는지에 대한 몇 가지 표시가 필요합니다. 즉 패딩과 (변경 가능한) 캐시 데이터 등을 무시합니다. 또한 동등성에 대한 결정을 내려야합니다 (즉, 일부 데이터 유형의 경우 동일한 논리 값 또는 일부 논리 값 (예 : +0 및 -0)을 고려해야 할 수도 있습니다. –

관련 문제