Re[5]: Многопоточные приложения
От: Павел Кузнецов  
Дата: 25.01.06 23:41
Оценка:
Здравствуйте, Alexander__S, Вы писали:

ПК>> А можно пояснить, зачем тебе по куче на каждый поток исполнения?


A__> Ну по куче на каждый поток наверное действительно,перебор. Но разве не бывает ситуаций, когда не желательно, чтобы несколько потоков лезли в одну и ту же кучу? Фрагментаия, например.


Разные могут быть случаи. Вполне может оказаться, что выигрыши от использования своих куч в каждом потоке вполне окупают затраты по организации соответствующего управления памятью. Собственно, есть даже вполне промышленные решения: http://www.hoard.org Просто мне показалось, что для автора оригинального сообщения проблема носит скорее виртуальный характер...
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[11]: Многопоточные приложения
От: Шахтер Интернет  
Дата: 26.01.06 08:22
Оценка:
Здравствуйте, shardim, Вы писали:

Ш>>Будет ли браться критическая секция при выполнении операций.

Ш>>См. документацию по функциям в MSDN.


S>Ребят можно чуточку поподробней, я же новичок в Си.


Могу посоветовать почитать Рихтера тогда по API Win32.

S>По каким функциям смотреть в MSDN?


Есть 4 основные функции для работы с кучей.

HeapCreate
HeapDestroy
HeapAlloc
HeapFree

S>И при чем блокировка при использовании HeapAlloc и HeapFree,

S>ведь я для каждого потока создаю свою кучу, и другие потоки к этой куче
S>доступа не имеют.

Когда ты созздаёшь хип функцией HeapCreate, то внутри у него создаётся критическая секция, которая в дальнейшем будет использована при операциях HeapAlloc/HeapFree для многопоточной блокировки.
Если тебе это не нужно (когда у тебя однопоточное приложение или когда куча используется эксклюзивно одним потоком),
то эту фичу можно отключить передав при конструировании кучи флажок HEAP_NO_SERIALIZE.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.