7 # if defined(WIN32) && !defined(NOMINMAX)
11 # define TBB_MIN_MAX_CLEANUP
13 # include <tbb/enumerable_thread_specific.h>
18 # ifdef TBB_MIN_MAX_CLEANUP
33 namespace enumerable_thread_specific_utils {
49 tbb::enumerable_thread_specific<T> values_;
52 using iterator =
typename tbb::enumerable_thread_specific<T>::iterator;
62 return values_.local();
67 return values_.begin();
83 std::function<
void(
void *)> initializer_;
101 std::lock_guard
lock{mutex_};
102 return values_.lookup_or_add_cb(
thread_id, [&]() {
103 T *value = (
T *)::
operator new(
sizeof(
T));
105 owned_values_.
append(std::unique_ptr<T>{value});
106 return std::reference_wrapper<T>{*value};
112 return values_.values().begin();
117 return values_.values().end();
void append(const T &value)
typename Map< int, std::reference_wrapper< T > >::MutableValueIterator iterator
EnumerableThreadSpecific()
EnumerableThreadSpecific(F initializer)
SyclQueue void void size_t num_bytes void
ccl_global float * buffer
thread_local int thread_id
std::atomic< int > next_id