У меня есть одноэлементный класс, и я уверен, что первый вызов синглтона выполняется только одним потоком. Я реализовал синглтон с ленивой инициализацией.
class MySingleton : private boost::noncopyable {
public:
/** singleton access. */
static MySingleton & instance()
{
static MySingleton myInstance;
return myInstance;
}
void f1();
void f2();
void f3();
void f4();
private:
MySingleton();
};
Теперь у меня есть еще один фабричный класс, который отвечает за создание всех синглетонов в среде одного потока. Синглтон можно использовать из нескольких потоков, а методы защищены от мьютекса.
Первый вопрос
Такой подход приемлем?
Второй вопрос
У меня есть сложный класс, который должен быть потокобезопасным.
Этот класс должен быть одноэлементным. Как можно, чтобы вызов различных методов класса был потокобезопасным. Например.
{
MySingletonLock lock;
// Other thread must wait here.
MySingleton::instance().f1();
MySingleton::instance().f3();
}
Как я могу получить это?