2012-10-15 3 views
1

Dans un programme sur lequel je travaille, nous utilisons tbb :: Parallel_reduce et un utilisateur a la possibilité d'annuler le programme à mi-chemin, ce que nous faisons en lançant une exception personnalisée. Lorsque l'exception est levée, le destructeur d'un thread unique est appelé pendant que les autres sont juste à gauche, et comme chaque thread crée une copie de certaines données (nécessaires au traitement), il peut y avoir des fuites de mémoire extrêmement importantes. Normalement, ce ne serait pas un problème, mais ce code est exécuté dans un autre programme, de sorte que le système d'exploitation ne sera pas en mesure de libérer de la mémoire.annuler tbb Parallel_reduce provoque une fuite de mémoire

La principale question que j'ai pour cela est quelqu'un sait un moyen de forcer le destructeur de chaque thread à être appelé lorsqu'une exception est levée ou une autre façon de pouvoir nettoyer les données. Merci beaucoup.

Répondre

1

semble avoir été résolu dans TBB 4.2, voici un extrait à partir des changements du fichier:

Bugs fixés:

  • Correction d'une fuite d'objets de corps de parallel_reduce lorsque l'exécution est annulée ou une exception est lancée, comme suggéré par Darcy Harrison.
Questions connexes