我需要在跨平臺項目中使用線程本地存儲。在* IX下,我使用pthreads,並且可以避免內存泄漏,這要歸功於作爲pthread_key_create
的第二個參數傳遞的nice析構函數指針,但是在Windows中,TlsAlloc
沒有這種東西。我也不能找到一個在線程退出時調用任何函數的普通地方(否則我會自制一些在退出時調用的函數指針列表)。有沒有辦法在Win32 API中動態釋放線程本地存儲?
現在看來,我基本上有一種情況,爲了實際使用線程本地存儲,我需要在堆上分配自己的空間並將指針傳遞給TlsSetValue
,但是如果線程退出... I有沒有保證的存儲方式被釋放(比別人其他顯式調用TlsGetValue
並在線程函數結束的/ etc delete
/free
/HeapFree
。
有誰知道一個更好的辦法?
你的線程是如何退出的?正常的方法是在threadproc返回之前清理。 – 2010-07-13 22:14:23