2009-10-25 13 views
0

Je développe une classe, qui peut être instanciée avant l'appel de main(). J'ai une section critique protégée par un mutex, c'est le code. Malheureusement, l'application échoue sous AIX lorsque le code est appelé avant l'initialisation des threads. Je veux ajouter une vérification au code pour éviter le verrouillage du mutex si les threads ne sont pas prêts et utiliser le verrouillage après l'initialisation des threads.Comment vérifier si l'initialisation de la gestion des threads est terminée?

Je travaille sur AIX 5.3 avec IBM XL C/C++ v.8.0

Répondre

0

Vous pouvez utiliser un bool global comme celui-ci:

bool main_called = false; 

class AClass { 
    AClass() 
    { 
     if (main_called) mutex_aquire(); 
     ... 
     if (main_called) mutex_release(); 
    } 
}; 

int main() 
{ 
    main_called = true; 
    ... 
} 

Cependant votre description de la mise en œuvre montre des signes de mauvaise conception. Essayez d'éviter les variables globales, ou du moins essayer de les initialiser après principal est appelé:

AClass *aclass; 

int main() 
{ 
    aclass = new AClass(); 
} 
+0

Je ne peux pas mettre en œuvre votre solution car je n'ai pas accès à main(). J'ai besoin d'un appel de bibliothèque qui peut me dire si l'initialisation du thread est terminée. Le problème est de savoir comment obtenir cette information, pas où l'enregistrer. – GMichael