00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _ThreadLibrary_ThreadKey_H_
00018 #define _ThreadLibrary_ThreadKey_H_ 1
00019
00026 #include <lib/sconfig.h>
00027
00028
00029 #if USE_PRIVATE__PTHREADS
00030 #include <errno.h>
00031 #include <pthread.h>
00032 #else
00033 #include <glib/gthread.h>
00034 #endif
00035
00047 class ThreadKey
00048 {
00049 public:
00050 #if USE_PRIVATE__PTHREADS
00051 static const pthread_key_t invalid=((pthread_key_t)(~0));
00052 #endif
00053
00054 private:
00055 #if USE_PRIVATE__PTHREADS
00056 pthread_key_t k;
00057 #else
00058 GStaticPrivate k;
00059 #endif
00060
00061 public:
00063 inline ThreadKey()
00064 #if USE_PRIVATE__PTHREADS
00065 { if(pthread_key_create(&k,NULL)) k=invalid; }
00066 #else
00067 { g_static_private_init(&k); }
00068 #endif
00069
00071 inline ~ThreadKey()
00072 #if USE_PRIVATE__PTHREADS
00073 { if(k!=invalid) pthread_key_delete(k); }
00074 #else
00075 { g_static_private_free(&k); }
00076 #endif
00077
00079 inline void *get()
00080 #if USE_PRIVATE__PTHREADS
00081 { return(pthread_getspecific(k)); }
00082 #else
00083 { return(g_static_private_get(&k)); }
00084 #endif
00085
00087 inline void set(void *v)
00088 #if USE_PRIVATE__PTHREADS
00089 { pthread_setspecific(k,v); }
00090 #else
00091 { g_static_private_set(&k,v,NULL); }
00092 #endif
00093
00094 };
00095
00096 #endif