J'ai une classe dont je peux avoir plusieurs exemples. À l'intérieur, il crée et initialise certains membres à partir d'une bibliothèque tierce (qui utilise certaines variables globales) et n'est pas adapté aux threads.
J'ai pensé à utiliser boost statique :: mutex, qui serait verrouillé dans mon constructeur et destructeur de classe. Ainsi, la création et la destruction d'instances parmi mes threads seraient sans danger pour les membres tiers.
class MyClass
{
static boost::mutex mx;
// 3rd party library members
public:
MyClass();
~MyClass();
};
MyClass::MyClass()
{
boost::mutex::scoped_lock scoped_lock(mx);
// create and init 3rd party library stuff
}
MyClass::~MyClass()
{
boost::mutex::scoped_lock scoped_lock(mx);
// destroy 3rd party library stuff
}
Je ne peux pas créer de lien car je reçois une erreur:
undefined reference to `MyClass::mx`
Ai-je besoin d'une initialisation spéciale de ce membre statique?
Y a-t-il quelque chose de mal à utiliser un mutex statique?
Edit: Le problème de liaison est corrigé avec une définition correcte dans cpp
boost::mutex MyClass::mx;
Vous avez déclaré, mais pas défini votre mutex statique de classe. Ajoutez simplement la ligne
boost::mutex MyClass::mx;
dans le fichier cpp avec l'implémentation de MyClass.