Comme le titre l'indique: Comment testez-vous et testez-vous correctement différentes implémentations de mutex en c ++?
Essentiellement, j'ai écrit ma propre classe de type std :: mutex pour un projet fonctionnant sur un noyau 2, armv7 dans le but de minimiser les frais généraux dans le cas non contesté. Maintenant, j'envisage d'utiliser ledit mutex dans plus d'endroits et également dans différentes architectures, mais avant de le faire, je voudrais m'assurer que
- c'est en fait correct
- il n'y a aucun cas pathologique dans lequel il fonctionne bien pire qu'un std :: mutex standard.
Évidemment, j'ai écrit quelques tests unitaires de base et des micro-benchmarks et tout semble fonctionner, mais en code multi-thread "semble fonctionner" ne me donne pas beaucoup de confort.
- Existe-t-il donc des techniques d'analyse statique ou dynamique établies?
- Quels sont les pièges courants lors de l'écriture de tests unitaires pour les classes mutex?
- Quels sont les cas de bord typiques à surveiller (en termes de performances)?
J'utilise uniquement des types de bibliothèques standard pour l'implémentation, qui comprend des opérations de chargement et de stockage non cohérentes sur Atomics. Cependant, je suis principalement intéressé par les conseils agnostiques d'implémentation, car j'aimerais également utiliser le même faisceau de test pour d'autres implémentations.
Réponses:
La question est complexe:
Certaines sources de complexité comprennent:
la source
Votre idée est très intéressante: un référentiel de conformité par rapport auquel une implémentation de mutex pourrait être testée.
Malheureusement, à ma connaissance, il n'y a pas de référence de conformité largement connue pour les implémentations de mutex. Donc, je suppose que vous avez entre les mains le problème très intéressant de créer une proposition pour un tel référentiel de conformité.
Et, puisque vous avez participé à la création d'une implémentation de référence, vous êtes le gars.
Si vous me permettez une suggestion, vous pourriez peut-être commencer cette recherche avec le standard POSIX pour les threads d'un côté, et une étude de la littérature théorique du traitement simultané, comme CSP, ou Communicating Sequential Processes. Ce type d'articles traite généralement des problèmes concurrents classiques, comme les philosophes de la restauration.
Leur mise en œuvre pourrait être une partie intéressante de votre référence en matière de conformité, je suppose.
la source