Vérifier le mutex optionnel avant le locking de la scope

J’ai un constructeur qui permet éventuellement à l’utilisateur de passer un ponteur à un mutex Boost. Si aucun mutex n’est fourni, le pointeur membre pMyMutex est défini sur NULL . Cela donne à l’utilisateur la possibilité d’appliquer une certaine sécurité du fil s’il le souhaite. Cependant, je ne peux pas utiliser un scoped_lock avec ce type de vérification pour des raisons évidentes 🙂

 if (pMyMutex != NULL) const boost::mutex::scoped_lock l(*pMyMutex); //The lock is already out of scope processStuff(x, y, z); 

Quelqu’un peut-il suggérer une solution simple et ordonnée à une telle exigence?

Implémentez votre propre wrapper similaire avec scoped_lock pour cacher la décision qu’il contient: envelopper un pointeur sur un mutex et vérifier si le pointeur est null (aucun locking appliqué) ou non (locking appliqué). Un squelette:

 class ScopedLockEx { public: ScopedLockEx( boost::mutex* pMutex) : pMutex_( pMutex) { if( pMutex_) pMutex_->lock(); } ~ScopedLockEx() { if( pMutex_) pMutex_->unlock(); } private: boost::mutex* pMutex_; };