Мне нужно использовать локальное хранилище потоков в кроссплатформенном проекте. В * IX я использую pthreads и могу избежать утечек памяти благодаря хорошему указателю функции деструктора, передаваемому в качестве второго аргумента pthread_key_create
, но в Windows TlsAlloc
такого нет. Также я не могу найти общее место, где любая функция вызывается при выходе из потока (в противном случае я бы доморощил некоторый список указателей функций, которые вызывались при выходе).
В нынешнем виде кажется, что у меня в основном ситуация, когда для фактического использования локального хранилища потока мне нужно выделить собственное пространство в куче и передать указатель на TlsSetValue
, но если поток завершается ... У меня нет никакого способа гарантировать, что память была освобождена (кроме кого-то явно вызывающего TlsGetValue
и delete
/ free
/ HeapFree
/ etc в конце функции потока.
Кто-нибудь знает лучший способ?