Tengo una clase que puedo tener muchas instancias de. Dentro crea e inicializa algunos miembros de una biblioteca de terceros (que usan algunas variables globales) y no es seguro para subprocesos.Usar mutex estático en una clase
Pensé en usar static boost :: mutex, que estaría bloqueado en mi clase de constructor y destructor. Por lo tanto, crear y destruir instancias entre mis hilos sería seguro para los miembros de terceros.
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
}
No puedo vincular porque recibo de error:
undefined reference to `MyClass::mx`
¿Necesito alguna inicialización específica de dicho miembro estático?
¿Hay algún problema con el uso del mutex estático?
Editar: Vinculación problema se resuelve con la definición correcta de la PPC
boost::mutex MyClass::mx;
Si usa un mutex estático, serializará el uso de * todas * las instancias de su clase, anulando por completo cualquier beneficio que pueda obtener a través de subprocesamiento múltiple. ¿Estás seguro de que quieres esto? –
@John Dibling Sí, solo se protegerá la creación y destrucción de los objetos; no ocurrirá con demasiada frecuencia. El resto del tiempo las instancias se usarán sin bloquear el mutex y debería ser bastante eficiente. –
@Dmity: Lo que me lleva a mi siguiente pregunta: ¿está seguro de que será seguro usar las instancias sin bloqueo? –