Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Хм. Интересно а в чем логика? Я то уж было ломанулся... 28.03.09 05:53 Число просмотров: 1910
Автор: amirul <Serge> Статус: The Elderman
|
> UPD: Забыл сказать - доступ к элементу пула должет быть > именно по индексу, а не по адресу обекта пула. Поэтому > одного SLIST (когда бы Index_in_pool включал бы указатель > на ptr = new Pool_entry_t() вместо индекса) без > Pool_entry_t m_pool[pool_size] недостаточно. Это часть > бизнес логики.
Хм. Интересно а в чем логика? Я то уж было ломанулся исправлять явно лишнее индексирование :-)
А вообще только что пришла идея: для каждого процессора выделить свой лист свободных индексов. Если выделение произошло на одном процессоре, а возврат на другом - это ожидаемо и нормально. Если пул у какого нибудь процессора закончится, то тогда уж и делать stop-the-world и балансировать пулы, предполагается, что если выделения/освобождения распределены более менее равномерно, то листы свободных индексов для каждого процессора будут примерно равными по длине.
Осталось найти недорогой способ получения номера текущего процессора, но думаю это непривилегированная операция и может быть выполнена без ухода в ядро. Кроме того, нужно придумать способ лочить очередь без захвата шины (уже в однопроцессорном окружении), но на мой взгляд это довольно легко.
Ну и после всех этих манипуляций придется проверять дают ли они хоть какой то выигрыш :-)
|
|
|