Некоторые структуры данных бинарного дерева (например, Splay trees) будут перебалансированы при чтениях, чтобы переместить недавно использованные элементы к корню, так что последующее время поиска может быть уменьшено.
Разрешено ли это делать стандартным контейнерам (std::map
, std::set
)?
По крайней мере, одной проблемой является безопасность потоков.Раньше я думал, что, пока вы выполняете операции только для чтения со стандартными контейнерами, было безопасно делать это из нескольких потоков без введения мьютексов / блокировок и т. Д. Может быть, мне нужно переосмыслить это?
Я знаю, что обычно красно-черные деревья используются для стандартных контейнеров дерева, и что эти структуры данных обычно не изменяются при чтении.Но будет ли гипотетическая реализация, которая действительно изменяла, соответствовать?
Мой c ++ - standard-foo нуждается в улучшении, но я не уверен, касается ли текущий стандарт безопасности потоков для контейнеров.Это отличается в c++0x
?