Copyright Digital Equipment Corp. All rights reserved.

Description

   This routine generates a unique thread-specific data key. The key
   argument points to an opaque object used to locate data.

   This routine generates and returns a new key value. The key
   reserves a cell. Each call to this routine creates a new cell
   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 tis_once()
   description for more information.)

   Your program can associate an optional destructor function with
   each key. At thread exit, if a key has a non-NULL destructor
   function pointer, and the thread has a non-NULL value associated
   with that key, the function pointed to is called with the current
   associated value as its sole argument. The order in which data
   destructors are called at thread termination is undefined.

   When threads are present, keys and any corresponding data are
   thread specific; they enable the context to be maintained on a
   per-thread basis. For more information about the use of tis_key_
   create() in a threaded environment, refer to the pthread_key_
   create() description.

   The Threads Library imposes a maximum number of thread-specific
   data keys, equal to the symbolic constant PTHREAD_KEYS_MAX.