码迷,mamicode.com
首页 > 其他好文 > 详细

pthread_once,pthread_key_create,pthread_key_delete,pthread_getspecific,pthread_setspecific()

时间:2015-09-08 12:03:00      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

int pthread_once(pthread_once_t *once_control, void (*init_routine) (void))

本函数使用初值为PTHREAD_ONCE_INIT的once_control变量保证init_routine()函数在本进程执行序列中仅执行一次。

 

#include <pthread.h>

int pthread_key_create(pthread_key_t *key, void (*destructor)(void*));创建线程私有数据

int pthread_key_delete(pthread_key_t key);注销线程私有数据

说明:

函数 pthread_key_create() 用来创建线程私有数据。该函数从 TSD 池中分配一项,将其地址值赋给 key 供以后访问使用。第 2 个参数是一个销毁函数,它是可选的,可以为 NULL,为 NULL 时,则系统调用默认的销毁函数进行相关的数据注销。如果不为空,则在线程退出时(调用 pthread_exit() 函数)时将以 key 锁关联的数据作为参数调用它,以释放分配的缓冲区,或是关闭文件流等。

不论哪个线程调用了 pthread_key_create(),所创建的 key 都是所有线程可以访问的,但各个线程可以根据自己的需要往 key 中填入不同的值,相当于提供了一个同名而不同值的全局变量(这个全局变量相对于拥有这个变量的线程来说)。

注销一个 TSD 使用 pthread_key_delete() 函数。该函数并不检查当前是否有线程正在使用该 TSD,也不会调用清理函数(destructor function),而只是将 TSD 释放以供下一次调用 pthread_key_create() 使用。在 LinuxThread 中,它还会将与之相关的线程数据项设置为 NULL。

 

void *pthread_getspecific(pthread_key_t key);读线程私有数据

int pthread_setspecific(pthread_key_t key, const void *value);写线程私有数据

函数 pthread_setspecific() 将 pointer 的值 (不是锁指的内容) 与key 相关联。

函数 pthread_getspecific() 将与 key 相关联的数据读出来。返回的数据类型都是 void *,因此可以指向任何类型的数据。

 

pthread_once,pthread_key_create,pthread_key_delete,pthread_getspecific,pthread_setspecific()

标签:

原文地址:http://www.cnblogs.com/myyan/p/4791123.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!