инициализация синглтона |
Здравствуйте, гость ( Вход | Регистрация )
инициализация синглтона |
Алексей1153 |
19.11.2012, 8:52
Сообщение
#1
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
вдруг задумался на такой вещью - нуждается ли область инициализации синглтона в обёртывании в критическую секцию ? Ведь конструктор вызовется при первом прохождении по объявлению статической переменной, а теоретически ситуация с одновременным вызовом MySingl::Inst() из двух потовок вполне возможна
Сообщение отредактировал Алексей1153 - 19.11.2012, 8:53 |
|
|
Iron Bug |
19.11.2012, 10:26
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
да. я её всегда снабжаю мьютексом. мало ли какой поток его будет вызывать.
|
|
|
Алексей1153 |
19.11.2012, 10:45
Сообщение
#3
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
к примеру, MyMutex - это оболочка для местного класса мутекса.
Тогда вот так нормально ли будет ?
|
|
|
Влад |
19.11.2012, 13:39
Сообщение
#4
|
Участник Группа: Участник Сообщений: 146 Регистрация: 20.3.2009 Из: Санкт-Петербург Пользователь №: 627 Спасибо сказали: 46 раз(а) Репутация: 8 |
Синглтон - это, вообще-то, совсем не простая конструкция, хотя и кажется, что он прост. Об инициализацию синглтона в многопоточных программах и на многопроцессорных машинах столько копий уже сломано.... :-) Обычно используется паттерн double-checked locking.
Может, кому-нибудь пригодится такая реализация:
|
|
|
Алексей1153 |
20.11.2012, 8:51
Сообщение
#5
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Влад, никто и не говорит, что он прост. Но вот я резко против приплетания туда шаблонов
|
|
|
Iron Bug |
20.11.2012, 9:22
Сообщение
#6
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
|
|
|
Алексей1153 |
20.11.2012, 13:00
Сообщение
#7
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Iron Bug, в моём случае не нужно шаблонов. Только поэтому. В общем случае я не против них
|
|
|
ssoft |
20.11.2012, 13:28
Сообщение
#8
|
Участник Группа: Участник Сообщений: 130 Регистрация: 17.2.2010 Из: Москва Пользователь №: 1470 Спасибо сказали: 30 раз(а) Репутация: 3 |
Обязательно синглтон обрамляется блокировкой.
Либо, если брать Qt, нужно что-то наподобие Q_GLOBAL_STATIC. |
|
|
Litkevich Yuriy |
21.11.2012, 12:49
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Алексей1153 |
21.11.2012, 14:54
Сообщение
#10
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Litkevich Yuriy, тот, кто будет это потом поддерживать, будет плеваться. Я на себе это уже испытал Там шаблонить то нечего, это всё пишется за 5 минут максимум. Раз в полгода
|
|
|
Текстовая версия | Сейчас: 20.4.2024, 2:09 |