Supposons que j'ai partagé double
variable. Thread A
met à jour plusieurs milliers de fois par seconde. Dans un autre fil B
je veux être averti d'une manière ou d'une autre au sujet de "mise à jour" chaque fois que cela se produit.technique sans verrouillage pour passer double mise à jour d'un thread à l'autre
j'essayé d'éviter les notifications complètement et il suffit d'utiliser la boucle while(true)
mais cela introduit des ralentissements importants dans mon programme lock-free calc: how to sum N double numbers that are changing by other threads? probablement à cause de cela « En attendant, vous continuez sur le chargement de la même gamme de mémoire encore et qui ne sont pas vraiment bon pour la performance puisque la bande passante mémoire est limitée. "
J'ai également essayé d'utiliser la classe Monitor
, mais il était également assez lent et j'ai vu jusqu'à 1-2 ms retards lorsque Monitor.TryEnter
renvoient false
.
Je pense maintenant que je dois faire des notifications en utilisant une technique sans verrouillage, en utilisant probablement SpinLock
ou autre chose?
i comme ça, mais la question est de savoir combien les frais généraux 'AutoResetEvent' introduire. – javapowered
Je n'ai pas testé cela. Vous pouvez tester le bloc de code pour 1000 itérations et vérifier le temps nécessaire pour exécuter ces itérations, puis vérifier les mêmes itérations avec le verrouillage. alors vous pouvez connaître les résultats. – Waqar