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.