À l'aide de statique dans une classe mutex

J'ai une classe que je peux avoir plusieurs instances de la. À l'intérieur, il crée et initialise certains membres d'une 3ème partie de la bibliothèque (qui utilisent des variables globales) et n'est pas thread-safe.

J'ai pensé à utiliser statique boost::mutex, qui serait enfermée dans ma classe de constructeur et de destructeur. Ainsi, la création et la destruction d'instances parmi mon fils serait sans danger pour la 3ème partie membres.



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 le lien parce que je reçois l'erreur:

undefined reference to `MyClass::mx`
  1. Faire j'ai besoin de quelques spéciales de l'initialisation d'un tel membre statique?

  2. Il n'y a rien de mal à propos de l'utilisation statique mutex?


Edit: problème de Liaison est fixé avec de la bonne définition du rpc

boost::mutex MyClass::mx;
  • Si vous utilisez un statique mutex, vous sérialiser l'utilisation de toutes les instances de votre classe, complètement en niant n'importe quel avantage vous pouvez acquérir par le biais de multithreading. Êtes-vous sûr de vouloir cela?
  • Dibling Oui, seulement de créer et de détruire les objets seront protégés - il n'arrivera pas trop souvent. Le reste du temps, les instances seront utilisés sans verrouiller le mutex et il devrait être tout à fait efficace.
  • Ce qui m'amène à ma prochaine question: êtes-vous sûr qu'il est sécuritaire d'utiliser les instances sans verrouillage?
  • Dibling La 3ème partie de la bibliothèque de fournir certains mécanisme de verrouillage qui est censé garantir thread-safe travail, mais ils ont besoin d'objets existants - mes tests ont montré que cela fonctionne. Il semble cependant que, parallèlement à la création de ces objets n'est pas très sûr.
  • Rappelez-vous qu'un static membre de données d'une class sera partagée entre toutes les instances de la classe ET des instances de classes dérivées. Vous pouvez vouloir reconsidérer la static qualificatif.
  • Je suis au courant, c'est exactement ce que je veux et je n'ai pas l'intention de dériver cette classe. À l'aide de cette statique mutex semble être la solution la plus simple comparaison à l'Usine par exemple.