powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / инициализация глобального ресурса в многопоточном приложении
10 сообщений из 10, страница 1 из 1
инициализация глобального ресурса в многопоточном приложении
    #35014850
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для инициализации общего ресурса использую прием заимствованный у Майерса, который гарантирует инициализацию переменной при первом вызове:
Код: plaintext
1.
2.
3.
4.
5.
6.
// на примере обертки критической секции:
CRITICAL_SECTION& spl_section()
{
	static CriticalSection spl_sec;
	return spl_sec.Get();
}

когда к такому коду могут обратиться сразу несколько потоков, то он становится не безопасным.

Сейчас делаю холостой вызов этой ф-ии, чтобы проинициализировать переменную до запуска др. потоков (насколько будет безопасным синхронное обращение после предварительной инициализации пока не знаю, думаю проблем не будет).

Вопрос: есть ли способ(ы) привести подобную ф-ию к безопасному виду для многопоточности без использование предварительной инициализации путем холостого вызова?
...
Рейтинг: 0 / 0
инициализация глобального ресурса в многопоточном приложении
    #35014887
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik...

все зависит от реализации, но если в секции храниться какое-нибудь простое выражение, то в принципе можно использовать InterlockedIncrement
...
Рейтинг: 0 / 0
инициализация глобального ресурса в многопоточном приложении
    #35014931
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколькоя знаю такое не пройдет. придется работать со статическим указателем и double check locking/ а еще лучше поситать Александреску
...
Рейтинг: 0 / 0
инициализация глобального ресурса в многопоточном приложении
    #35015024
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этом подходе это в принципе не возможно. Должен существовать какой-нибудь блокиратор, для создания твоего блокиратора. :) И т.д. - рекурсия.
...
Рейтинг: 0 / 0
инициализация глобального ресурса в многопоточном приложении
    #35015069
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит холостой вызов и точка, если я вас правильно понял.
...
Рейтинг: 0 / 0
инициализация глобального ресурса в многопоточном приложении
    #35015127
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TubrikЗначит холостой вызов и точка, если я вас правильно понял.

Создай статический класс, который в конструкторе будет дергать эту функцию. Т.о. инициализация у тебя будет проходить в dynamic initialization этапе.
...
Рейтинг: 0 / 0
инициализация глобального ресурса в многопоточном приложении
    #35015396
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh TubrikЗначит холостой вызов и точка, если я вас правильно понял.

Создай статический класс, который в конструкторе будет дергать эту функцию. Т.о. инициализация у тебя будет проходить в dynamic initialization этапе.

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

Вообщем все ясно, спасибо за ответы.
...
Рейтинг: 0 / 0
инициализация глобального ресурса в многопоточном приложении
    #35016401
tsipa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
погугли на слова multithreaded singleton
...
Рейтинг: 0 / 0
инициализация глобального ресурса в многопоточном приложении
    #35016582
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik Akh TubrikЗначит холостой вызов и точка, если я вас правильно понял.

Создай статический класс, который в конструкторе будет дергать эту функцию. Т.о. инициализация у тебя будет проходить в dynamic initialization этапе.

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

Вообщем все ясно, спасибо за ответы.

Если объекты будут юзать в main()-е, то все будет ок.
...
Рейтинг: 0 / 0
инициализация глобального ресурса в многопоточном приложении
    #35018544
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TubrikЗначит холостой вызов и точка, если я вас правильно понял.А чем тебе не нравится холостой вызов? Если ресурс глобален, значит он существует уже в момент стартапа. Вот в стартапе его и инициализируй. На экран заставку "грузимся" а в фоне загружаешь свои глобальные объекты. Стандартный, проверенный временем подход.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / инициализация глобального ресурса в многопоточном приложении
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]