pthread_key_create 子例程

用途

创建特定于线程的数据键。

线程库 (libpthreads.a)

语法

#include <pthread.h>

int pthread_key_create ( key, destructor )
pthread_key_t * key;
void (* destructor) (void *);

描述

pthread_key_create 子例程创建特定于线程的数据密钥。 该密钥在进程中的所有线程之间共享,但每个线程都有与该密钥关联的特定数据。 特定于线程的数据是空指针,最初设置为 NULL

应用程序负责确保对每个请求的密钥仅调用此子例程一次。 例如,可以通过在创建其他线程之前调用子例程或使用一次性初始化工具来完成此操作。

通常,特定于线程的数据是指向动态分配的存储器的指针。 释放存储器时,值应设置为 NULL。 建议不要将此指针强制转换为标量数据类型 (例如,int ) ,因为强制转换可能不可移植,并且 NULL 的值依赖于实现。

可以指定可选析构函数例程。 如果特定值不是 NULL,那么在调用清除例程之后,将在终止和拆离每个线程时对其进行调用。 通常,析构函数例程将释放特定于存储线程的数据。 它将接收特定于线程的数据作为参数。

注: pthread.h 头文件必须是使用线程库的每个源文件的第一个包含文件。 否则,应使用 -D_THREAD_SAFE 编译标志,或使用 cc_r 编译器。 在这种情况下,会自动设置标志。

参数

描述
key 指向将存储密钥的位置。
析构函数 (destructor) 指向可选析构函数例程,用于在线程终止时清除数据。 如果不需要清除,那么此指针应该为 NULL

返回值

如果成功, pthread_key_create 函数将新创建的键值存储在 * key 处并返回零。 否则,将返回错误号以指示错误。

错误代码

在下列情况下, pthread_key_create 函数将失败:

描述
再次 系统缺少创建另一个特定于线程的数据密钥所必需的资源,或者已超出系统对每个进程 PTHREAD_KEYS_MAX 的密钥总数施加的限制。
ENOMEM 内存不足,无法创建密钥。

pthread_key_create 函数不会返回错误代码 EINTR