(И да, я знаю, что это означает, что вы не должны пытаться делать интересные вещи в конструкторах глобальных объектов. В этом суть.)

ли способ реализовать одноэлементный объект в C ++, который:

Ленивое построение потокобезопасным способом (два пользователя могут одновременно быть первым пользователем синглтона - он все равно должен быть создан только один раз).Не полагается на то, что статические переменные создаются заранее (поэтому объект-одиночка безопасен для использования во время создания статических переменных).

(Я недостаточно хорошо знаю мой C ++, но это тот случай, когда целочисленные и постоянные статические переменные инициализируются перед выполнением любого кода (т. Е. Даже перед выполнением статических конструкторов - их значения уже могут быть «инициализированы» в программе) image)? Если так - возможно, это можно использовать для реализации мьютекса синглтона - который, в свою очередь, можно использовать для защиты создания реального синглтона ..)

Отлично, похоже, у меня сейчас есть пара хороших ответов (позор, я не могу отметить 2 или 3 какответ). Похоже, есть два широких решения:

Использовать статическую инициализацию (в отличие от динамической инициализации) статической переменной POD и реализовывать свой собственный мьютекс с помощью встроенных атомарных инструкций. Это был тип решения, на которое я намекал в своем вопросе, и я думаю, что я уже знал.Используйте другую библиотечную функцию, напримерpthread_once или жеповышение :: call_once, Об этом я точно не знал - и очень благодарен за ответы.

Ответы на вопрос(9)

Ваш ответ на вопрос