key
    Location where the new thread-specific data key will be stored.
 destructor
    Procedure called to destroy a thread-specific data value
    associated with the created key when the thread terminates.
    Note that the argument to the destructor for the user-specified
    routine is the non-NULL value associated with a key.