Показать сообщение отдельно
Старый 16.04.2012, 01:08   #11
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: контейнеры

Mr_F_, а как ты решаешь вопросы многопоточности в своем контейнере. не блокировками же? (мютексами или крит. секциями?)
нет, я просто делаю контейнеры, которым обязательно нужно делать reserve перед использованием, после чего они гарантируют отсутствие работы с кучей.
также исключаю insert элемента в абы какое место массива.
дальше остаётся лишь соблюдать правило - 1 поток-писальщик, остальные читальщики.
если нужно менять местами, передвигать элементы массива (не вылезая за его границы), можно иметь дополнительный indirection массив такого же размера, который маппит оригинальные id к новым.

ну это касательно вектора и стринга.
а альтернативу std::map пока не находил и вряд ли напишу удачнее)
так что стараюсь планировать архитектуру так, чтобы им просто не пришлось пользоваться, а если уж никак, то только в одном потоке.

---
+ ещё один камень в огород стл вектора: он не может содержать выравненные данные, типа __declspec(align(16))
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
HolyDel (16.04.2012)