This routine returns the value currently bound to the specified
thread-specific data key.
This routine can be called from a data destructor function.
When threads are present, the data and keys are thread specific;
they enable a library to maintain context on a per-thread basis.