Prayer

在一般中寻求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

线程特定数据

Posted on 2009-07-05 12:53 Prayer 阅读(743) 评论(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。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理