4 #include <boost/atomic.hpp> 13 return thread_specific_slot_counter.fetch_add(1);
16 void*
get_specific_data(std::vector<detail::specific_data_info> *specific_data,
unsigned slot)
18 return slot < specific_data->size() ?
19 (*specific_data)[slot].value :
nullptr;
21 void set_specific_data(std::vector<detail::specific_data_info> *specific_data,
unsigned slot,
void* new_value,
void(*cleanup)(
void*))
23 if (slot + 1 > specific_data->size())
24 specific_data->resize(slot + 1);
44 if (!current_context ||
54 if (!current_context ||
void set_task_specific_data(unsigned slot, void *new_value, void(*cleanup)(void *))
unsigned get_next_unused_task_storage_slot()
void * get_task_specific_data(unsigned slot)
boost::atomic< unsigned > thread_specific_slot_counter
unsigned next_unused_task_storage_slot
static thread & current()
void * get_thread_specific_data(unsigned slot)
void set_specific_data(std::vector< detail::specific_data_info > *specific_data, unsigned slot, void *new_value, void(*cleanup)(void *))
void * get_specific_data(std::vector< detail::specific_data_info > *specific_data, unsigned slot)
std::vector< detail::specific_data_info > * _task_specific_data
unsigned get_next_unused_thread_storage_slot()
void set_thread_specific_data(unsigned slot, void *new_value, void(*cleanup)(void *))