2010-08-11 2 views
2

Je raffine un grand corps de code natif qui utilise quelques sections critiques statiques et n'appelle jamais DeleteCriticalSection, les laissant traiter l'exit à nettoyer.Y a-t-il des conséquences à ne jamais supprimer des sections critiques?

Il n'y a aucune fuite et aucune inquiétude sur le nombre total de CS devenant trop élevé, je me demande juste s'il y a des conséquences à long terme de Windows pour ne pas les nettoyer. Nous avons des suites de tests de régression qui lancent un programme des milliers de fois par jour, bien que les utilisateurs finaux ne sont pas susceptibles de faire quelque chose comme ça. En raison de la gamme de machines déployées, nous devons également considérer Windows XP et ce code natif est exécuté à partir d'une application gérée.

Répondre

2

Une section critique est juste un bloc de mémoire sauf si un conflit est détecté, moment auquel un objet événement est créé pour la synchronisation. L'exit de processus nettoie tous les événements persistants. Si vous les créiez dynamiquement au moment de l'exécution sans les libérer, ce serait mauvais. Si ceux qui ne sont pas nettoyés sont un montant fixe pour chaque processus, je ne m'inquiéterais pas.

En principe, chaque ressource de processus est nettoyée lorsque le processus se termine. Les ressources du noyau comme les objets d'événement suivent ce principe.

+0

Merci pour le réconfort. –

2

La réponse courte n'est probablement pas. La réponse longue est, c'est une pratique de programmation paresseuse et devrait être corrigé.

Pour utiliser correctement DeleteCriticalSection, vous devez vous arrêter de manière ordonnée afin qu'aucun autre thread ne possède ou ne tente de posséder la section avant/après sa suppression. Et les programmeurs deviennent paresseux pour définir et implémenter comment shutdown fonctionnera pour leur programme.

Il y a beaucoup de choses que vous pouvez faire sans conséquences immédiates mesurables - mais cela ne rend pas justice. Une attitude similaire vis-à-vis d'autres poignées/objets dans la même base de code aura un effet cumulatif et pourrait ajouter des «conséquences».

+0

convenu que c'est un peu bâclé et j'ai une longue liste de nettoyages de code que je prévois ;-) –

Questions connexes