00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _QORE_QORETHREADLOCALSTORAGE_H
00025
00026 #define _QORE_QORETHREADLOCALSTORAGE_H
00027
00028 #include <pthread.h>
00029 #include <assert.h>
00030
00032
00035 template<typename T>
00036 class QoreThreadLocalStorage {
00037 private:
00039 pthread_key_t key;
00040
00042 DLLLOCAL QoreThreadLocalStorage(const QoreThreadLocalStorage&);
00043
00045 DLLLOCAL QoreThreadLocalStorage& operator=(const QoreThreadLocalStorage&);
00046
00047 public:
00049 DLLLOCAL QoreThreadLocalStorage()
00050 {
00051 pthread_key_create(&key, 0);
00052 }
00053
00055 DLLLOCAL ~QoreThreadLocalStorage()
00056 {
00057 pthread_key_delete(key);
00058 }
00059
00060 DLLLOCAL T *get()
00061 {
00062 return (T *)pthread_getspecific(key);
00063 }
00064
00065 DLLLOCAL void set(T *ptr)
00066 {
00067 pthread_setspecific(key, (void *)ptr);
00068 }
00069 };
00070
00071 #endif // _QORE_QORETHREADLOCALSTORAGE_H