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;
Definition threadlocal.h:31
the main MongoDB namespace
Definition bulk_operation_builder.h:24
macros for mongo internals
Definition threadlocal.h:161
remove mongo implementation macros after using