29#include <unordered_map>
41template <
typename Value>
69 std::lock_guard<std::mutex> guard(
m_mutex);
71 auto it =
m_map.find(tid);
72 if (it !=
m_map.end()) {
82 std::lock_guard<std::mutex> guard(
m_mutex);
83 auto [inserted_it, inserted] =
m_map.emplace(tid, std::move(instance));
85 return &inserted_it->second;
91 std::unordered_map<std::thread::id, Value>
m_map;
Registry of per-thread values owned by one enclosing object.
Definition: ut0per_thread.h:42
std::function< Value()> m_factory
Definition: ut0per_thread.h:89
Per_thread(const Per_thread &)=delete
Per_thread & operator=(const Per_thread &)=delete
std::mutex m_mutex
Definition: ut0per_thread.h:90
std::unordered_map< std::thread::id, Value > m_map
Definition: ut0per_thread.h:91
Per_thread(std::function< Value()> factory)
Create an empty registry.
Definition: ut0per_thread.h:49
Value * operator->()
Return this thread's Value, creating and storing it on first access.
Definition: ut0per_thread.h:66
Define std::hash<Gtid>.
Definition: gtid.h:355
pid_type get_id()
Definition: process.h:48
This file contains a set of libraries providing overloads for regular dynamic allocation routines whi...
Definition: aligned_alloc.h:48
Version control for database, common definitions, and include files.
#define ut_a(EXPR)
Abort execution if EXPR does not evaluate to nonzero.
Definition: ut0dbg.h:97