Уничтожение статических членов класса в локальном хранилище потоков

Я пишу быструю многопоточную программу и хочу избежать синхронизации (функция, которую необходимо синхронизировать, должна называться примерно 5 000 000 раз в секунду, поэтому даже мьютекс был бы слишком тяжелым).

Сценарий следующий: у меня есть единственный глобальный экземпляр класса, и каждый поток может получить к нему доступ. Во избежание синхронизации все данные внутри класса доступны только для чтения, за исключением группы членов класса, которые затем объявляются в TLS (с __thread или __declspec (thread)).

К сожалению, для того, чтобы используйте интерфейс __thread, предлагаемый компилятором, члены класса должны быть статическими и без конструкторов / деконструкторов. Классы, которые я использую, конечно, имеют настраиваемые конструкторы, поэтому я объявляю в качестве членов класса указатель на эти классы (что-то вроде static __thread MyClass * _object).

Затем, когда поток в первый раз вызывает метод из global instance, я сделаю что-то вроде «(if _object == NULL) object = new MyClass (...)».

Моя самая большая проблема: есть ли разумный способ освободить эту выделенную память? Этот глобальный класс взят из библиотеки и используется многими потоками в программе, Спасибо, ребята.

6
задан Gianluca 4 January 2011 в 09:35
поделиться