2010-11-26 15 views
0

J'ai un tableau de certains types de données (int, string, ou même des objets de classe définis par l'utilisateur) et plusieurs threads dans mon programme. Je veux être en mesure de trouver si le tableau a été mis à jour après son initialisation avec certaines valeurs. Une idée consiste à associer le hachage des valeurs dans le tableau et chaque fois que je veux vérifier si le tableau a été mis à jour, recalculer le hachage. Y a-t-il un autre moyen de le faire en C++? ou pouvons-nous vérifier si la plage d'adresses mémoire a été mise à jour depuis la dernière vérification ou non?comment vérifier la mise à jour d'un tableau

Merci

+0

Cela dépend de tant de choses .. 1) avez-vous l'accès au code qui modifie? Si non, alors 2) À quelle fréquence est-il modifié, à quelle fréquence souhaitez-vous effectuer ces vérifications et quelle est sa taille? Oh, et pourquoi en avez-vous besoin? – ruslik

Répondre

3

Vous pouvez encapsuler le tableau dans un modèle de classe qui fournit une façade pour toutes les opérations de lecture et d'écriture dont vous avez besoin et marque également le tableau dirty lorsqu'il est mis à jour - réinitialisez le drapeau dirty à chaque inspection.

Je ne sais pas comment vous pouvez rendre cela fiable sur plusieurs threads de lecture/écriture mais je suppose que cela dépend du modèle d'accès et de la sémantique exacte que vous voulez.

[Hashage ne fonctionnera pas parce que hash peuvent toujours entrer en collision.]

+0

ouais, peut-être une bonne idée – user352951

+0

Une solution plus sophistiquée serait permettre aux parties intéressées (Observateurs) d'enregistrer un rappel de sorte que chaque modification apportée aux données du tableau (Observable) entraîne une notification immédiate (modèle Observer). Comme surexcitation, encore une fois, il est difficile de dire à partir de l'info limitée ici. –

+0

Merci, je vais essayer de mettre en œuvre cela. – user352951

3

L'approche de hachage ne fonctionne que si vous ne se soucient pas le cas où un objet est modifié mais remis à zéro à sa valeur initiale. Dans ce cas, l'objet était "mis à jour", mais il n'y a aucun moyen de le dire en utilisant un hachage.

Une autre approche consiste à utiliser un compteur de mise à jour: conservez un nombre entier à côté de l'objet et augmentez-le chaque fois que vous mettez à jour.

+0

Je vais bien avec l'objet en cours de modification, mais rétabli à la même chose. Wat serait une bonne fonction de hachage qui peut fonctionner sur tous les types de données possibles ... une fonction de hachage modélisée? Le compteur de mise à jour ne fonctionnera pas avec string, int, etc. – user352951

+0

numéro de séquence est une bonne idée –

+0

@ user352951: vous ne pouvez pas écrire "une bonne fonction de hachage [pour] tous les types de données possibles" ... à tout le moins vous avez besoin d'une indication sur les bits qui participent à la valeur logique - c.-à-d. ignorant le remplissage et les données de cache (susceptibles d'être modifiées) etc. Vous devez également prendre des décisions concernant l'équivalence (avec certains types de données valeur logique, ou vous pouvez avoir besoin - pour vos besoins - de considérer certaines valeurs logiques équivalentes (par exemple +0 et -0) –