|
|
|
инициализация глобального ресурса в многопоточном приложении
|
|||
|---|---|---|---|
|
#18+
Для инициализации общего ресурса использую прием заимствованный у Майерса, который гарантирует инициализацию переменной при первом вызове: Код: plaintext 1. 2. 3. 4. 5. 6. когда к такому коду могут обратиться сразу несколько потоков, то он становится не безопасным. Сейчас делаю холостой вызов этой ф-ии, чтобы проинициализировать переменную до запуска др. потоков (насколько будет безопасным синхронное обращение после предварительной инициализации пока не знаю, думаю проблем не будет). Вопрос: есть ли способ(ы) привести подобную ф-ию к безопасному виду для многопоточности без использование предварительной инициализации путем холостого вызова? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 14:55:02 |
|
||
|
инициализация глобального ресурса в многопоточном приложении
|
|||
|---|---|---|---|
|
#18+
Tubrik... все зависит от реализации, но если в секции храниться какое-нибудь простое выражение, то в принципе можно использовать InterlockedIncrement ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 15:03:34 |
|
||
|
инициализация глобального ресурса в многопоточном приложении
|
|||
|---|---|---|---|
|
#18+
Насколькоя знаю такое не пройдет. придется работать со статическим указателем и double check locking/ а еще лучше поситать Александреску ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 15:18:06 |
|
||
|
инициализация глобального ресурса в многопоточном приложении
|
|||
|---|---|---|---|
|
#18+
В этом подходе это в принципе не возможно. Должен существовать какой-нибудь блокиратор, для создания твоего блокиратора. :) И т.д. - рекурсия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 15:42:48 |
|
||
|
инициализация глобального ресурса в многопоточном приложении
|
|||
|---|---|---|---|
|
#18+
Значит холостой вызов и точка, если я вас правильно понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 15:51:24 |
|
||
|
инициализация глобального ресурса в многопоточном приложении
|
|||
|---|---|---|---|
|
#18+
TubrikЗначит холостой вызов и точка, если я вас правильно понял. Создай статический класс, который в конструкторе будет дергать эту функцию. Т.о. инициализация у тебя будет проходить в dynamic initialization этапе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 16:03:52 |
|
||
|
инициализация глобального ресурса в многопоточном приложении
|
|||
|---|---|---|---|
|
#18+
Akh TubrikЗначит холостой вызов и точка, если я вас правильно понял. Создай статический класс, который в конструкторе будет дергать эту функцию. Т.о. инициализация у тебя будет проходить в dynamic initialization этапе. Такой вариант тоже не пойдет, мне кажется, т.к. нет гарантии, что этот статический класс будет инициализирован раньше др. объекта, в котором он может использоваться в качестве начальных данных инициализации этого объекта. Как вы сказали, имеем бесконечную зависимость. Вообщем все ясно, спасибо за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 17:03:26 |
|
||
|
инициализация глобального ресурса в многопоточном приложении
|
|||
|---|---|---|---|
|
#18+
погугли на слова multithreaded singleton ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2007, 06:40:41 |
|
||
|
инициализация глобального ресурса в многопоточном приложении
|
|||
|---|---|---|---|
|
#18+
Tubrik Akh TubrikЗначит холостой вызов и точка, если я вас правильно понял. Создай статический класс, который в конструкторе будет дергать эту функцию. Т.о. инициализация у тебя будет проходить в dynamic initialization этапе. Такой вариант тоже не пойдет, мне кажется, т.к. нет гарантии, что этот статический класс будет инициализирован раньше др. объекта, в котором он может использоваться в качестве начальных данных инициализации этого объекта. Как вы сказали, имеем бесконечную зависимость. Вообщем все ясно, спасибо за ответы. Если объекты будут юзать в main()-е, то все будет ок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2007, 09:42:38 |
|
||
|
инициализация глобального ресурса в многопоточном приложении
|
|||
|---|---|---|---|
|
#18+
TubrikЗначит холостой вызов и точка, если я вас правильно понял.А чем тебе не нравится холостой вызов? Если ресурс глобален, значит он существует уже в момент стартапа. Вот в стартапе его и инициализируй. На экран заставку "грузимся" а в фоне загружаешь свои глобальные объекты. Стандартный, проверенный временем подход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2007, 17:44:26 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=263&tid=2027608]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
36ms |
get topic data: |
16ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 190ms |
| total: | 298ms |

| 0 / 0 |
