关于线程的私有存储pthread_key_t

    最近在工做中遇到了线程的私有存储的东东,现将对pthread_key_t的认识与你们分享一下: linux

    熟悉linux线程开发的人都清楚,一个进程中线程直接除了线程本身的栈和寄存器以外,其余几乎都是共享的,若是线程想维护一个只属于线程本身的全局变量怎么办?线程的私有存储解决了这个问题。 函数

    下面说一下线程存储的具体用法。
spa

  1. 建立一个类型为 pthread_key_t 类型的变量。
  2. 调用 pthread_key_create() 来建立该变量。该函数有两个参数,第一个参数就是上面声明的 pthread_key_t 变量,第二个参数是一个清理函数,用来在线程释放该线程存储的时候被调用。该函数指针能够设成 NULL ,这样系统将调用默认的清理函数。
  3. 当线程中须要存储特殊值的时候,能够调用 pthread_setspecific() 。该函数有两个参数,第一个为前面声明的 pthread_key_t 变量,第二个为 void* 变量,这样你能够存储任何类型的值。
  4. 若是须要取出所存储的值,调用 pthread_getspecific() 。该函数的参数为前面提到的 pthread_key_t 变量,该函数返回 void * 类型的值。

    pthread_key_t不管是哪个线程建立,其余全部的线程都是可见的,即一个进程中只需phread_key_create()一次。看似是全局变量,然而全局的只是key值,对于不一样的线程对应的value值是不一样的(经过pthread_setspcific()和pthread_getspecific()设置)。 线程

相关文章
相关标签/搜索