2009-12-10 4 views
1

J'ai une application multithread écrite en C++. Et j'utilise mutex pour les écritures de fichiers. Je soupçonne que quelque part pendant l'exécution du programme, le mutex n'est pas libéré.
Donc je me demandais s'il y avait un moyen de vérifier les verrous et les libérations de mutex sur un fichier, par programmation ou autrement.
Je cours le code sur SuseLinux, btw.
Merci,Vérification de la version de Mutex

+0

Le problème était en fait quelque chose d'autre, apparemment ridicule. Je n'ai pas initialisé une variable bool dans certains constructeurs en supposant qu'elle serait initialisée à false par défaut. Maintenant, si vous vous demandez comment pourrais-je être confus si le problème était dû à un mutex ou une mauvaise initialisation; Eh bien, si vous avez regardé le code, je suppose que vous comprendrez. Quoi qu'il en soit, merci pour les réponses. Ils ont été utiles. – rabin

Répondre

8

Bienvenue dans le monde merveilleux du débogage du code multi-thread. Il n'y a pas de solution miracle pour résoudre vos problèmes, mais vous devriez au moins utiliser les idiomes RAII pour gérer votre mutex. Cela signifie que le mutex est enveloppé dans une classe C++ qui revendique le mutex lorsque des instances de la classe sont créées et le libère quand il (l'instance de classe) est détruit. Vous pouvez également enregistrer de manière rentable les revendications/versions, mais sachez que cela peut entraîner l'introduction de bogues et d'artefacts.

+2

Boost :: Threads bibliothèque a un très bel ensemble de RAVE mutex portable ... aide beaucoup à éviter les interblocages de verrouillage persistante. – paxos1977

Questions connexes