00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_CSUTIL_THREADING_PTHREAD_TLS_H__
00020 #define __CS_CSUTIL_THREADING_PTHREAD_TLS_H__
00021
00022 #ifndef DOXYGEN_RUN
00023
00024 #include <pthread.h>
00025
00026 namespace CS
00027 {
00028 namespace Threading
00029 {
00030 namespace Implementation
00031 {
00032 class ThreadLocalBase
00033 {
00034 public:
00035 typedef void (* DestructorFn)(void*);
00036
00037 ThreadLocalBase (DestructorFn dtor = 0)
00038 {
00039 pthread_key_create (&threadIndex, dtor);
00040 }
00041
00042 ~ThreadLocalBase()
00043 {
00044 pthread_key_delete (threadIndex);
00045 }
00046
00047 void SetValue(void* data) const
00048 {
00049 pthread_setspecific(threadIndex, data);
00050 }
00051
00052 void* GetValue() const
00053 {
00054 return pthread_getspecific(threadIndex);
00055 }
00056
00057 protected:
00058 pthread_key_t threadIndex;
00059 };
00060 }
00061 }
00062 }
00063
00064 #endif // DOXYGEN_RUN
00065
00066 #endif // __CS_CSUTIL_THREADING_PTHREAD_TLS_H__