19 #include <boost/thread/tss.hpp>
42 void set(
const T& i ) {
63 boost::thread_specific_ptr<T> _val;
73 #if defined(MONGO_HAVE___THREAD) || defined(MONGO_HAVE___DECLSPEC_THREAD)
77 boost::thread_specific_ptr<T> tsp;
89 # if defined(MONGO_HAVE___DECLSPEC_THREAD)
91 # define TSP_DECLARE(T,p) extern TSP<T> p;
93 # define TSP_DEFINE(T,p) __declspec( thread ) T* _ ## p; \
95 template<> T* TSP<T>::get() const { return _ ## p; } \
96 void TSP<T>::reset(T* v) { \
102 # define TSP_DECLARE(T,p) \
103 extern __thread T* _ ## p; \
104 template<> inline T* TSP<T>::get() const { return _ ## p; } \
107 # define TSP_DEFINE(T,p) \
108 __thread T* _ ## p; \
109 template<> void TSP<T>::reset(T* v) { \
116 #elif defined(_POSIX_THREADS) && (_POSIX_THREADS >= 0)
122 verify( pthread_key_create( &_key, TSP::dodelete ) == 0 );
126 pthread_key_delete( _key );
129 static void dodelete(
void* x ) {
130 T* t =
reinterpret_cast<T*
>(x);
135 return reinterpret_cast<T*
>( pthread_getspecific( _key ) );
141 verify( pthread_setspecific( _key, v ) == 0 );
154 # define TSP_DECLARE(T,p) extern TSP<T> p;
156 # define TSP_DEFINE(T,p) TSP<T> p;
162 boost::thread_specific_ptr<T> tsp;
164 T*
get()
const {
return tsp.get(); }
165 void reset(T* v) { tsp.reset(v); }
169 reset( t =
new T() );
174 # define TSP_DECLARE(T,p) extern TSP<T> p;
176 # define TSP_DEFINE(T,p) TSP<T> p;
the main MongoDB namespace
Definition: bulk_operation_builder.h:24
remove mongo implementation macros after using
macros for mongo internals
Definition: threadlocal.h:31
Definition: threadlocal.h:161