Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.02 c
2-1180337637
Rimd
2007-05-28 11:33
2007.06.24
TDownloadUrl и его Event


15-1179906322
Сатир
2007-05-23 11:45
2007.06.24
Переход с Indy 9.0 на Indy 10.0 (вопрос для знатоков Indy)


3-1175243884
elserpiente
2007-03-30 12:38
2007.06.24
диалог создания строки подключения в ADOConnection в runtime


2-1180403402
Александр_Н
2007-05-29 05:50
2007.06.24
Возник вопрос по Delphi


15-1179996866
gray_falcon
2007-05-24 12:54
2007.06.24
Дайте линк на самоучитель