Статус:
Offline
Реєстрація: 05.02.2007
Повідом.: 36996
Реєстрація: 05.02.2007
Повідом.: 36996
Safe singleton in C+ 03 - Разминка для мозга
Итак постановка задачи:
Я хочу написать полностью потокобезопасный контекстонезависимый синглтон.
Очевидно что нижеприведенный классический код:
В общем случае не являеться безопасным (хотя вроде как в С++ 11 он уже сам потокобезопасен).
Далее можно использовать указатели с мьютексами, но опять таки где гарантия что все не упадет при инициализации мьютекса?
Но в теории мьютекс можно сделать статиком и тогда он будет инициализирован при запуске программы, и вопрос синхронизации отпадет сам собой.
Но при таком подходе очевидно. что обращение к синглтону из других глобальных объектов может привести к крашу, если инициализация данных из файла с синглтоном не успеет выполниться до вызова синглтона при инициализации других данных.
Выходит тупик - либо у нас потокобезопасный синглтон который нельзя вызывать из global scope либо он непотокобезопасен, но безпроблемно вызываем из global scope?
ъУ кого то есть идеии как на С++ 03 реализовать полностью безопасный синглтон?
Итак постановка задачи:
Я хочу написать полностью потокобезопасный контекстонезависимый синглтон.
Очевидно что нижеприведенный классический код:
Код:
class MySingleton
{
public:
MySingleton& Instance()
{
static MySingleton instance;
return instance;
}
};
Далее можно использовать указатели с мьютексами, но опять таки где гарантия что все не упадет при инициализации мьютекса?
Но в теории мьютекс можно сделать статиком и тогда он будет инициализирован при запуске программы, и вопрос синхронизации отпадет сам собой.
Но при таком подходе очевидно. что обращение к синглтону из других глобальных объектов может привести к крашу, если инициализация данных из файла с синглтоном не успеет выполниться до вызова синглтона при инициализации других данных.
Выходит тупик - либо у нас потокобезопасный синглтон который нельзя вызывать из global scope либо он непотокобезопасен, но безпроблемно вызываем из global scope?
ъУ кого то есть идеии как на С++ 03 реализовать полностью безопасный синглтон?
Останнє редагування: