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