线程特定数据
2013-09-09 17:41
260 查看
q在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据。
q在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。
q但有时应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨多个函数访问。
qPOSIX线程库通过维护一定的数据结构来解决这个问题,这个些数据称为(Thread-specific Data,或 TSD)。
q线程特定数据也称为线程本地存储TLS(Thread-local storage)
q对于POD类型的线程本地存储,可以用__thread关键字
q
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。
[align=left]TlsGetValue[/align]
[align=left]函数功能:检取调用线程的线程局部存储(TLS)槽的值。对于每个TLS索引,进程的每个线程都有它自己的槽。[/align]
[align=left]函数原型:LPVOID TlsGetValue(DWORD dwTlsIndex)[/align]
[align=left]参数:[/align]
[align=left]dwTlsIndex:由TlsAlloc分配的索引。[/align]
[align=left]返回值:若函数成功,则返回调用线程的TLS槽中的值;失败则返回0。注意,存放在TLS槽中值可以为0,在这种情况下GetLastError返回NO_ERROR。[/align]
[align=left][/align]
[align=left]TlsSetValue[/align]
[align=left]函数功能:存储调用线程的线程局部存储(TLS)槽的值。[/align]
[align=left]函数原型:BOOL TlsSetValue(DWORD dwTlsIndex, LPVOID lpTlsValue)[/align]
[align=left]参数:[/align]
[align=left]dwTlsIndex:由TlsAlloc分配的索引。[/align]
[align=left]lpTlsValue:调用线程的线程局部存储(TLS)槽的值。[/align]
[align=left]返回值:若函数成功,则返回值不为0;失败则返回0。[/align]
[align=left][/align]
[align=left]TlsFree[/align]
[align=left]函数功能:释放调用线程局部存储(TLS)索引。[/align]
[align=left]函数原型:BOOL TlsFree(DWORD dwTlsIndex)[/align]
[align=left]参数:[/align]
[align=left]dwTlsIndex:由TlsAlloc分配的索引。[/align]
[align=left]返回值:若函数成功,则返回值不为0;失败则返回0。[/align]
q在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。
q但有时应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨多个函数访问。
qPOSIX线程库通过维护一定的数据结构来解决这个问题,这个些数据称为(Thread-specific Data,或 TSD)。
q线程特定数据也称为线程本地存储TLS(Thread-local storage)
q对于POD类型的线程本地存储,可以用__thread关键字
q
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。
[align=left]TlsGetValue[/align]
[align=left]函数功能:检取调用线程的线程局部存储(TLS)槽的值。对于每个TLS索引,进程的每个线程都有它自己的槽。[/align]
[align=left]函数原型:LPVOID TlsGetValue(DWORD dwTlsIndex)[/align]
[align=left]参数:[/align]
[align=left]dwTlsIndex:由TlsAlloc分配的索引。[/align]
[align=left]返回值:若函数成功,则返回调用线程的TLS槽中的值;失败则返回0。注意,存放在TLS槽中值可以为0,在这种情况下GetLastError返回NO_ERROR。[/align]
[align=left][/align]
[align=left]TlsSetValue[/align]
[align=left]函数功能:存储调用线程的线程局部存储(TLS)槽的值。[/align]
[align=left]函数原型:BOOL TlsSetValue(DWORD dwTlsIndex, LPVOID lpTlsValue)[/align]
[align=left]参数:[/align]
[align=left]dwTlsIndex:由TlsAlloc分配的索引。[/align]
[align=left]lpTlsValue:调用线程的线程局部存储(TLS)槽的值。[/align]
[align=left]返回值:若函数成功,则返回值不为0;失败则返回0。[/align]
[align=left][/align]
[align=left]TlsFree[/align]
[align=left]函数功能:释放调用线程局部存储(TLS)索引。[/align]
[align=left]函数原型:BOOL TlsFree(DWORD dwTlsIndex)[/align]
[align=left]参数:[/align]
[align=left]dwTlsIndex:由TlsAlloc分配的索引。[/align]
[align=left]返回值:若函数成功,则返回值不为0;失败则返回0。[/align]
相关文章推荐
- Linux多线程实践(4) --线程特定数据
- 线程特定数据 Thread Specified Data
- 线程的基本属性(分离,栈大小,保护区,竞争,调度并发)以及TSD特定数据
- Linux多线程实践(四 )线程的特定数据
- Linux多线程实践(4) --线程特定数据
- 线程特定数据(TSD)
- 线程特定数据TSD及其实现原理
- 线程特定数据
- muduo网络库学习笔记(7):线程特定数据
- LInux多线程编程----线程特定数据的处理函数
- 线程特定数据的小程序。
- 线程特定数据
- 线程特定数据详解
- Linux多线程实践(4) --线程特定数据
- 线程特定数据函数的使用
- Linux多线程编程(三)——线程特定数据
- 为线程特定数据创建键
- 线程特定数据详解
- 线程特定数据
- 线程特定数据(学习)