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