J'ai une Hashtable à laquelle plusieurs threads accèdent. Par exemple, regardons trois threads:Concurrence HashTable
Le thread A fait Hash.Insert ("a", nouvel objet());
Le thread B fait Hash.Insert ("b", nouvel objet());
Le thread C fait Hash.Insert ("a", nouvel objet());
Pour certaines raisons, je ne peux pas utiliser un verrou sur l'ensemble Hash
Je ne se soucient de l'ordre ou quel objet sera à la table de hachage à la fin du processus. La seule chose qui m'importe est de ne pas corrompre les données en mettant à jour la même cellule à partir de différents threads.
Quelles sont mes options? ou n'est-ce pas un problème et le HashTable gère cela tout seul et garde les données intactes.
"Pour certaines raisons, je ne peux pas utiliser un verrou sur l'ensemble du hachage" Pouvez-vous expliquer cette exigence? Est-ce seulement la performance? – CodesInChaos
@CodeInChaos il peut y avoir des milliers de demandes simultanément, donc je suis plus inquiet de la famine car il est possible pour un thread qui a acquis un verrou de ne jamais avoir le temps processeur ... –
Il est hautement improbable que vous fassiez l'expérience de non-FIFO traitement des serrures.Voir http://stackoverflow.com/questions/961869/is-there-a-synchronization-class-that-guarantee-fifo-order-in-c. pour un objet de synchronisation qui garantit l'ordre FIFO, ce qui empêchera la famine. –