MySQL 26.7.0
Source Code Documentation
thread_srv.h
Go to the documentation of this file.
1// Copyright (c) 2026, Oracle and/or its affiliates.
2//
3// This program is free software; you can redistribute it and/or modify
4// it under the terms of the GNU General Public License, version 2.0,
5// as published by the Free Software Foundation.
6//
7// This program is designed to work with certain software (including
8// but not limited to OpenSSL) that is licensed under separate terms,
9// as designated in a particular file or component or in included license
10// documentation. The authors of MySQL hereby grant you an additional
11// permission to link the program and your derivative works with the
12// separately licensed software that they have either included with
13// the program or referenced in the documentation.
14//
15// This program is distributed in the hope that it will be useful,
16// but WITHOUT ANY WARRANTY; without even the implied warranty of
17// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18// GNU General Public License, version 2.0, for more details.
19//
20// You should have received a copy of the GNU General Public License
21// along with this program; if not, write to the Free Software
22// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
23
24#ifndef MYSQL_CONCURRENCY_THREAD_SRV_H
25#define MYSQL_CONCURRENCY_THREAD_SRV_H
26
27#ifdef MYSQL_CONCURRENCY_THREAD_STL_H
28#error Inclusion of both thread_stl.h and thread_srv.h is prohibited.
29#endif
30
31#include <atomic>
32#include <cstdint>
33#include <functional>
38
39#define MDEF_TH_KEY(key) key,
40
41namespace mysql::concurrency {
42
44
45/// @brief Wrapper to mysql thread, which matches interface of std::thread
46class Thread {
47 public:
48 Thread() = default;
49 Thread(const Thread &) = delete;
50 Thread &operator=(const Thread &src) = delete;
51 Thread(Thread &&) = default;
52 Thread &operator=(Thread &&) = default;
53
54 /// @brief Creates a thread, runs thread function
55 /// @param thread_key PSI thread key
56 /// @param run_func Function called asynchronously in a separate thread
57 /// @param args Function arguments
58 template <class Callable, class... Args>
59 Thread(Thread_key thread_key, Callable &&run_func, Args &&...args);
60
61 /// @brief Creates a thread, runs thread function
62 /// @param run_func Function called asynchronously in a separate thread
63 /// @param args Function arguments
64 template <class Callable, class... Args>
65 Thread(Callable &&run_func, Args &&...args);
66
67 /// @brief Joins thread
68 void join() { my_thread_join(&m_thread_handle, nullptr); }
69
70 /// @brief Checks whether a thread was created successfully.
71 /// @return True if thread can be joined, false otherwise.
72 bool joinable() const { return m_creation_error_code == 0; }
73
74 /// @brief Returns the thread creation error code.
75 /// @return 0 on success, error code on failure.
77
78 private:
79 /// Mysql thread handle
81 /// Thread attributes
83 /// Thread key
85 /// Thread creation error code.
87};
88
89/// @brief Fetches internal id, PSI id in case linked with mysqld, or
90/// internal thread id
91inline unsigned long long fetch_thread_mysql_id(
92 [[maybe_unused]] std::size_t my_internal_id) {
93#ifdef HAVE_PSI_THREAD_INTERFACE
94 struct PSI_thread *psi = PSI_THREAD_CALL(get_thread)();
95 return PSI_THREAD_CALL(get_thread_internal_id)(psi);
96#else
97 return my_internal_id;
98#endif
99}
100
101} // namespace mysql::concurrency
102
103#define MDEF_CREATE_THREAD(thread_key, callable, ...) \
104 mysql::concurrency::Thread(thread_key, callable, __VA_ARGS__)
105
107
108#endif // MYSQL_CONCURRENCY_THREAD_SRV_H
Wrapper to mysql thread, which matches interface of std::thread.
Definition: thread_srv.h:46
int m_creation_error_code
Thread creation error code.
Definition: thread_srv.h:86
Thread_key m_thread_key
Thread key.
Definition: thread_srv.h:84
Thread & operator=(Thread &&)=default
bool joinable() const
Checks whether a thread was created successfully.
Definition: thread_srv.h:72
my_thread_handle m_thread_handle
Mysql thread handle.
Definition: thread_srv.h:80
Thread(Thread &&)=default
Thread & operator=(const Thread &src)=delete
int creation_error_code() const
Returns the thread creation error code.
Definition: thread_srv.h:76
Thread(const Thread &)=delete
void join()
Joins thread.
Definition: thread_srv.h:68
my_thread_attr_t m_thread_attr
Thread attributes.
Definition: thread_srv.h:82
#define PSI_THREAD_CALL(M)
Definition: psi_thread.h:36
struct PSI_thread PSI_thread
Definition: psi_thread_bits.h:82
unsigned int PSI_thread_key
Instrumented thread key.
Definition: psi_thread_bits.h:50
Instrumentation helpers for mysys threads.
int my_thread_join(my_thread_handle *thread, void **value_ptr)
Definition: my_thread.cc:122
pthread_attr_t my_thread_attr_t
Definition: my_thread_bits.h:49
Instrumentation helpers for memory allocation.
Definition: cache_line_size.h:31
unsigned long long fetch_thread_mysql_id(std::size_t my_internal_id)
Fetches internal id, PSI id in case linked with mysqld, or internal thread id.
Definition: thread_srv.h:91
PSI_thread_key Thread_key
Definition: thread_srv.h:43
Instrumentation helpers for conditions.
Definition: my_thread_bits.h:58