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