多线程编程指南

创建线程特定的数据键

使用 thr_keycreate(3C) 可分配键,用于标识进程中线程特定数据。键可全局应用于进程中的所有线程。创建键时,每个线程都会将一个值与其绑定。

除了函数的名称和参数以外,Solaris 线程的线程特定数据与 POSIX 线程的线程特定数据完全相同。本节概述了 Solaris 函数。 对于 POSIX 线程,请参见pthread_key_create 语法

thr_keycreate 语法

#include <thread.h>



int thr_keycreate(thread_key_t *keyp,

    void (*destructor) (void *value));

keyp 为每个绑定线程单独维护特定的值。所有的线程最初都会绑定到专用元素 keyp,该元素可用于访问其线程特定数据。创建键时,对于所有活动线程,将为新键赋予值 NULL。此外在创建线程时,还会为以前在新线程中创建的所有键赋予值 NULL。

destructor 函数是可选的,可以将其与每个 keyp 相关联。线程退出时,如果 keyp 具有非 NULL 的 destructor,并且线程具有与 keyp 相关联的非 NULL value,则 destructor 将用当前的关联 value 进行调用。如果线程退出时存在多个 destructor 与其相关,则 destructor 的调用顺序是不确定的。

thr_keycreate 返回值

thr_keycreate() 在成功运行后返回 0。如果检测到以下任一情况,thr_keycreate() 将失败并返回对应的值。


EAGAIN

描述:

系统资源不足,无法创建另一个线程特定的数据键,或者键数目超过了 PTHREAD_KEYS_MAX 的每进程限制。


ENOMEM

描述:

可用内存不足,无法将 valuekeyp 相关联。