Текущий архив: 2007.06.24;
Скачать: CL | DM;
Вниз
Динамическое выделение памяти в нитях Найти похожие ветки
← →
SpellCaster (2007-04-19 16:19) [0]Как корректно реализовать сие? Прочитал у Рихтера, что выделять динамически небезопасно, поскольку возможен конфликт при обращении к куче.
Задача такая: надо выделить кусок памяти и передать его в основной поток. Как бы это провернуть? Крит.секции тут, наверно, не подойдут - или же придется оборачивать в них вообще все выделения памяти, включая основной поток. Всегда есть Synchronize, конечно, но, может, имеются какие-то многопоточные варианты системных функций, как в visual c. Или я зря парюсь?
← →
Сергей М. © (2007-04-19 16:21) [1]
> SpellCaster (19.04.07 16:19)
Читай в справке про "IsMultiThread variable".
До полного отупения либо полного просветления)
← →
Сергей М. © (2007-04-19 16:25) [2]
> Прочитал у Рихтера, что выделять динамически небезопасно,
> поскольку возможен конфликт при обращении к куче
Уж не знаю, что там пишет Рихтер, но штатный BMM в составе борландовских продуктов Борланд никому не навязывает. Да и мало ли потокобезопасных кучевых менеджеров существует на свете)
← →
SpellCaster (2007-04-19 20:04) [3]> Да и мало ли потокобезопасных кучевых менеджеров существует
> на свете)
Хм... подскажи хоть один, а?
← →
Сергей М. © (2007-04-20 08:29) [4]Ну, к примеру, менеджер в составе msvcrt.dll
← →
Leonid Troyanovsky © (2007-04-20 09:59) [5]
> SpellCaster (19.04.07 16:19)
> Как корректно реализовать сие? Прочитал у Рихтера, что выделять
> динамически небезопасно, поскольку возможен конфликт при
> обращении к куче.
А разве там не написано, как выделять безопасно?
Читай внимательней, возможно, на другой странице.
--
Regards, LVT.
← →
SpellCaster (2007-04-20 10:41) [6]> [5] Leonid Troyanovsky © (20.04.07 09:59)
Там есть про локальную TLS, но мне-то нужно выделенную память передавать другим потокам. Про такой способ я пока ничего не нашёл.
> [4] Сергей М. © (20.04.07 08:29)
А есть пример его использования?
Почитал про IsMultiThread. Выходит, менеджер памяти автоматом переходит в режим многопоточности - и нечего париться?
← →
Сергей М. © (2007-04-20 11:21) [7]
> Выходит, менеджер памяти автоматом переходит в режим многопоточности
> - и нечего париться?
Конечно)
← →
Riply © (2007-04-20 11:41) [8]> [7] Сергей М. © (20.04.07 11:21)
>>Выходит, менеджер памяти автоматом переходит в режим многопоточности - и нечего париться?
> Конечно)
А в каких ситуациях "менеджер памяти автоматом переходит в режим многопоточности" ?
Например, при вызове BeginThread, а еще ?
← →
SpellCaster (2007-04-20 12:34) [9]> Конечно)
Вот это славно =)
> А в каких ситуациях "менеджер памяти автоматом переходит
> в режим многопоточности" ?
Indicates whether the application spawned additional threads using BeginThread or TThread objects.
← →
Leonid Troyanovsky © (2007-04-20 14:25) [10]
> SpellCaster (20.04.07 10:41) [6]
> Там есть про локальную TLS, но мне-то нужно выделенную память
> передавать другим потокам. Про такой способ я пока ничего
Книги у меня под рукой нет, но, кажется мне, что обсуждение
проблемы c кучей идет, как раз в главе о синхронизации.
А по-поводу первого вопроса - VirtualAlloc c передачей
первичному потоку адреса распределенного.
Только, первичный поток и сам может с этим легко справиться.
Т.е., проблемы только в доступе к общей памяти из
разных потоков.
Синхронизация, синхронизация и синхронизация.
Кста, менеджер памяти при установленном IsMultithread
защищает свои данные критической секцией, никакой мистики.
--
Regards, LVT.
← →
SpellCaster (2007-04-23 15:09) [11]> [10] Leonid Troyanovsky © (20.04.07 14:25)
Ясно.
Благодарю всех за помощь!
Страницы: 1 вся ветка
Текущий архив: 2007.06.24;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.021 c