Синглтонная реализация C ++, двойная проверка блокировки - PullRequest
0 голосов
/ 14 февраля 2011

Я много слышал и читал о подходах к одноэлементной реализации в C ++, таких как Meyer, Phoenix и т. Д., Но все они, похоже, имели проблемы в определенных сценариях использования. Поэтому я разработал собственный подход к реализации, Даниэль Синглтон . То, что я хотел бы знать, является ли это правильным или нет ... Я думаю, что это так, но, пожалуйста, скажите мне, если есть какие-то недостатки, о которых я не думал!

Кроме того, я пытался сделать его поточно-ориентированным, не получая блокировки все время, используя двойную проверку блокировки, о которой я тоже много читал, и все говорили, что она сломана. Я тоже пытался это исправить, и я хотел бы знать, является ли мое решение правильным или нет ... а если нет, то как оно может потерпеть неудачу?

Ответы [ 2 ]

4 голосов
/ 14 февраля 2011

Шаблон синглтона сам по себе нарушен тем, что создает ужасный код.Действительно намного лучше использовать внедрение зависимости / инверсию управления.Смотрите мою страницу о том, как избегать одиночных игр здесь .

Ваш синглтон-класс слишком сложен.Похоже, что вы реализуете ленивый шаблон синглтона, и вы все еще приобретаете блокировку, поэтому - кроме создания ненужных запутанных вещей - я не уверен, что то, что вы делаете, сильно отличается от более простых реализаций с отложенным синглтоном.Вы тестировали свою реализацию, чтобы определить, быстрее ли она, чем более простые альтернативы?Я хотел бы видеть явную победу в производительности, чтобы пойти с чем-то более сложным.

1 голос
/ 14 февраля 2011

Шаблон блокировки с двойной проверкой подобен ascii и IEE754 с плавающей запятой.Можно с уверенностью предположить, что он работает достаточно хорошо в каждой системе, которую вы когда-либо видели, хотя формально это не гарантировано.

...