Esta pregunta se realizó en una entrevista. La primera parte fue escribir la clase Singleton:Singleton con multiprocesadores
class Singleton
{
static Singleton *singletonInstance;
Singleton() {}
public:
static Singleton* getSingletonInstance()
{
if(singletonInstance == null)
{
singletonInstance = new Singleton();
}
return singletonInstance;
}
};
Entonces se le preguntó cómo manejar esta getSingletonInstance() en una situación multiproceso. Yo no estaba muy seguro, pero he modificado como:
class Singleton
{
static Singleton *singletonInstance;
Singleton() {}
static mutex m_;
public:
static Singleton* getSingletonInstance()
{
m_pend();
if(singletonInstance == null)
{
singletonInstance = new Singleton();
}
return singletonInstance;
}
static void releaseSingleton()
{
m_post();
}
};
Después me dijeron que, si bien se requiere un mutex, a la espera y la publicación de un mutex no es eficiente ya que toma tiempo. Y hay una mejor manera de manejar esta situación.
¿Alguien sabe una manera mejor y más eficiente de manejar la clase Singleton en una situación multiproceso?
¿No usa singleton en absoluto? –
Usar el estado global en un código multiproceso es una buena forma de obtener infinitos dolores de cabeza. Doblemente así en caso de stupidgleton. –
@CatPlusPlus: es simplón. Simplón. –