Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ pthread_keycreate(3thr) — Ultrix/UWS 4.4 RISC

Media Vault

Software Library

Restoration Projects

Artifacts Sought

pthread_keycreate(3thr)

Name

pthread_keycreate − Generates a unique per-thread context key value. 

Syntax

#include <pthread.h>

int pthread_keycreate (key, destructor)
pthread_key_t *key;
pthread_destructor_t destructor;

Arguments

key Value of the new per-thread context key. 

destructor
Procedure called to destroy a context value associated with the created key when the thread terminates.

Description

This routine generates a unique per-thread context key value.  This key value identifies a per-thread context, which is an address of memory generated by the client containing arbitrary data of any size. 

Per-thread context is a mechanism that allows client software to associate context information with the current thread. (This mechanism can be thought of as a means for a client to add unique fields to the thread control block.) 

For example, per-thread context can be used by a language run-time library that needs to associate a language-specific thread-private data structure with an individual thread.  The per-thread context routines also provide a portable means of implementing the class of storage called thread-private static, which is needed to support parallel decomposition in the FORTRAN language. 

This routine generates and returns a new key value.  The key provides a cell within each thread.  Each call to this routine creates a new cell, and each call within a process returns a key value that is unique within an application invocation. Keys must be generated from initialization code that is guaranteed to be called only once within each process.  (See the pthread_once Description for more information.) 

When multiple facilities share access to per-thread context, the facilities must agree on the key value that is associated with the context. The key value must be created once and should be stored in a location known to each facility. (Encapsulate key creation and context value setting within a special facility for that purpose.) 

An implementation can choose to predefine some number of keys for favored clients, such as certain compilers, run-time libraries, or the debugger. 

When a thread terminates, its per-thread context is automatically destroyed; however, the key value remains.  For each per-thread context currently associated with the thread, the destructor routine associated with the key value of that context is called.  The order in which per-thread context destructors are called at thread termination is undefined. 

Return Values

If an error condition occurs, this routine returns -1 and sets errno to the corresponding error value.  Possible return values are as follows. 

Return Error Description
0 Successful completion. 
-1 [ENOMEM] An attempt is made to allocate a key when the key name space is exhausted. This is not a temporary condition. 
-1 [EAGAIN] Insufficient memory exists to create the key. 
-1 [EINVAL] Invalid argument. 

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026