Распределитель, специфичный для потока, является довольно сложной задачей.
Я потратил некоторое время на поиск распределителя, специфичного для потока, "с полки".Лучшее, что я нашел, это клад (hoard.org).Это обеспечило значительное улучшение производительности, однако у накопителя есть некоторые серьезные недостатки
- Я испытал некоторые сбои во время тестирования
- Коммерческое лицензирование стоит дорого
- Это «перехватывает» системные вызовыв malloc, метод, который я считаю хитрым.
Поэтому я решил развернуть свой собственный распределитель памяти для потоков, основанный на boost :: pool и boost :: threadspecificptr.Это потребовало небольшого количества серьезно продвинутого кода на C ++, но теперь, похоже, работает хорошо.
Прошло уже несколько месяцев с тех пор, как я посмотрел на детали этого, но, возможно, я смогувзгляните еще раз.
Ваш комментарий о том, что вы ищете специфичный для потока, но не безопасный для потока распределитель.Это имеет смысл, потому что, если распределитель является специфичным для потока, он не должен быть потокобезопасным.Тем не менее, по моему опыту, дополнительное бремя обеспечения безопасности потоков является тривиальным, до тех пор, пока не возникает спор.
Тем не менее, вся эта теория забавна, но я думаю, что мы должны перейти к практичности.Я считаю, что нам нужна небольшая инструментированная отдельная программа, которая демонстрирует проблему, которую нужно решить.У меня было что-то похожее на очень похожую проблему с распределением std :: multiset, и я написал программу, которую вы можете увидеть здесь: Параллельное чтение из контейнеров STL
Если вы можете написать что-то подобное, показывая вашипроблема, тогда я могу проверить, может ли мой распределитель памяти конкретного потока быть применен с преимуществом в вашем случае.