Posted on 2009-07-05 12:53
Prayer 閱讀(761)
評論(0) 編輯 收藏 引用 所屬分類:
LINUX/UNIX/AIX
這個概念對我來說比較新穎。
posix實現涉及函數:(TSD,thread-specific data)
pthread_once_t once = PTHREAD_ONCE_INIT
確保init參數所指函數在進程范圍內只被調用一次
int pthread_once(pthread_once_t *onceptr, void(*init)(void) );
pthread_key_t g_key;
int pthread_key_create( pthread_key_t *keyptr, void(*destructor)(void*value));
int pthread_key_delete(pthread_key_t key);
int pthread_setspecific(pthread_key_t key, const void *pointer)
void * pthread_getspecific(pthread_key_t key)
==============================================================
windows實現涉及函數:
TLS(thread local storage) API:TlsAlloc、TlsGetValue、TlsSetValue、TlsFree
TlsAlloc
函數功能:分配一個線程局部存儲(TLS)索引。該進程的任何線程都可以使用該索引來存儲和檢取線程中的值。
函數原型:DWORD TlsAlloc(void)
參數:無。
返回值:若函數成功,則返回值為一個TLS索引。失敗則返回0XFFFFFFFF。
TlsGetValue
函數功能:檢取調用線程的線程局部存儲(TLS)槽的值。對于每個TLS索引,進程的每個線程都有它自己的槽。
函數原型:LPVOID TlsGetValue(DWORD dwTlsIndex)
參數:
dwTlsIndex:由TlsAlloc分配的索引。
返回值:若函數成功,則返回調用線程的TLS槽中的值;失敗則返回0。注意,存放在TLS槽中值可以為0,在這種情況下GetLastError返回NO_ERROR。
TlsSetValue
函數功能:存儲調用線程的線程局部存儲(TLS)槽的值。
函數原型:BOOL TlsSetValue(DWORD dwTlsIndex, LPVOID lpTlsValue)
參數:
dwTlsIndex:由TlsAlloc分配的索引。
lpTlsValue:調用線程的線程局部存儲(TLS)槽的值。
返回值:若函數成功,則返回值不為0;失敗則返回0。
TlsFree
函數功能:釋放調用線程局部存儲(TLS)索引。
函數原型:BOOL TlsFree(DWORD dwTlsIndex)
參數:
dwTlsIndex:由TlsAlloc分配的索引。
返回值:若函數成功,則返回值不為0;失敗則返回0。