![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Алексей1153 |
![]()
Сообщение
#1
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
вдруг задумался на такой вещью - нуждается ли область инициализации синглтона в обёртывании в критическую секцию ? Ведь конструктор вызовется при первом прохождении по объявлению статической переменной, а теоретически ситуация с одновременным вызовом MySingl::Inst() из двух потовок вполне возможна
Сообщение отредактировал Алексей1153 - 19.11.2012, 8:53 |
|
|
![]() |
Iron Bug |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
да. я её всегда снабжаю мьютексом. мало ли какой поток его будет вызывать.
|
|
|
Алексей1153 |
![]()
Сообщение
#3
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
к примеру, MyMutex - это оболочка для местного класса мутекса.
Тогда вот так нормально ли будет ?
|
|
|
Влад |
![]()
Сообщение
#4
|
Участник ![]() ![]() Группа: Участник Сообщений: 146 Регистрация: 20.3.2009 Из: Санкт-Петербург Пользователь №: 627 Спасибо сказали: 46 раз(а) Репутация: ![]() ![]() ![]() |
Синглтон - это, вообще-то, совсем не простая конструкция, хотя и кажется, что он прост. Об инициализацию синглтона в многопоточных программах и на многопроцессорных машинах столько копий уже сломано.... :-) Обычно используется паттерн double-checked locking.
Может, кому-нибудь пригодится такая реализация:
|
|
|
Алексей1153 |
![]()
Сообщение
#5
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
Влад, никто и не говорит, что он прост. Но вот я резко против приплетания туда шаблонов
![]() |
|
|
Iron Bug |
![]()
Сообщение
#6
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Алексей1153 |
![]()
Сообщение
#7
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
Iron Bug, в моём случае не нужно шаблонов. Только поэтому. В общем случае я не против них
|
|
|
ssoft |
![]()
Сообщение
#8
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 130 Регистрация: 17.2.2010 Из: Москва Пользователь №: 1470 Спасибо сказали: 30 раз(а) Репутация: ![]() ![]() ![]() |
Обязательно синглтон обрамляется блокировкой.
Либо, если брать Qt, нужно что-то наподобие Q_GLOBAL_STATIC. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#9
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Алексей1153 |
![]()
Сообщение
#10
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
Litkevich Yuriy, тот, кто будет это потом поддерживать, будет плеваться. Я на себе это уже испытал
![]() |
|
|
Iron Bug |
![]()
Сообщение
#11
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
вот и я тоже юзаю шаблоны, как заготовки. сделал один раз - и юзай потом сколько угодно. просто из практических соображений такие вещи иногда лучше делать один раз и навсегда.
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#12
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Iron Bug |
![]()
Сообщение
#13
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
а по-моему так шаблоны как раз очень даже повышают читабельность кода и с ними куда проще программировать.
|
|
|
ssoft |
![]()
Сообщение
#14
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 130 Регистрация: 17.2.2010 Из: Москва Пользователь №: 1470 Спасибо сказали: 30 раз(а) Репутация: ![]() ![]() ![]() |
а по-моему так шаблоны как раз очень даже повышают читабельность кода и с ними куда проще программировать. Согласен. Тема правда немного сменилась. Встал вопрос об использовании шаблонов. Мое мнение такое (если кого-то интересует ![]() Одинаковая реализация singlton в разных кусках программы - это, собственно, копипаст, а копипаст - зло по определению. Одна ошибка или описка и исправлений куча и скрытых ошибок и т.п. Обязательно вспомнят "добрым словом". А если программистам сложно разбираться в структурах языка, то ... такие программисты. А если, например, переводчик сказал, что ему сложно переводить с одного языка на другой? Это его работа!!! Вообще, программистам пора выползать из песочниц, а то спрашивается - зачем вообще шаблоны в языке? зачем развивают эти страшные шаблоны? они же портят читабельность кода? их же сложно сопровождать? и т.п. И, что значит низкая квалификация? Пусть повышают свою квалификацию. Это что теперь норма для всех профессий? Плохие учителя, врачи, юристы, программисты, экономисты? Так мы все про...ем, что еще не успели. |
|
|
Влад |
![]()
Сообщение
#15
|
Участник ![]() ![]() Группа: Участник Сообщений: 146 Регистрация: 20.3.2009 Из: Санкт-Петербург Пользователь №: 627 Спасибо сказали: 46 раз(а) Репутация: ![]() ![]() ![]() |
...... тот, кто будет это потом поддерживать, будет плеваться. Я на себе это уже испытал ![]() То есть, ты предлагаешь в каждом проекте заводить свою реализацию синглтона? Во-первых, это как минимум копипаста, т.е. - зло. Причем, через несколько лет, когда разные программисты будут поддерживать и дописывать эти реализации по-разному, вдруг неожиданно окажется, что эти реализации работают по-разному и нельзя тупо выкорчевать из проекта одну и всунуть другую... Во-вторых, проекты разные бывают.... Бывают - сильно долгоиграющие. И если в первой версии (простая однопоточная программа) сойдет и классический синглтон Мейерса без всяких защит и блокировок (ибо не от чего защищаться и некого блокировать), то через несколько лет, а то и пару десятков лет, прога лехко может стать многопоточной и для многопроцессорных машинок... И вот тут-то без блокировок и синхронизации уже не обойтись. А когда нужно синхронизировать еще и кэши разных процессоров... о майн готт! (Я это все как раз проходил, последовательно.... И в результате пришел к выводу, что лучше написать единый шаблонный синглтон (примерно так, как приведено) - "написано однажды, используется везде". А поддерживать там особо-то нечего, - это приблизительно как STL: в исходниках черт ногу сломит, зато использовать без влезания "под капот" легко и приятно.) Впрочем, свое видение проблемы я не навязываю. Так, высказал общие соображения..... |
|
|
Алексей1153 |
![]()
Сообщение
#16
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Iron Bug |
![]()
Сообщение
#17
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Алексей1153 |
![]()
Сообщение
#18
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 11.7.2025, 20:37 |