MySQL 8.3.0
Source Code Documentation
my_xp_thread.h
Go to the documentation of this file.
1/* Copyright (c) 2015, 2023, 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 also distributed 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 included with MySQL.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License, version 2.0, for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
22
23#ifndef MY_XP_THREAD_INCLUDED
24#define MY_XP_THREAD_INCLUDED
25
26#ifndef XCOM_STANDALONE
27
28#include "my_sys.h"
29#include "my_thread.h"
31
36
37#define NATIVE_THREAD_CREATE_DETACHED MY_THREAD_CREATE_DETACHED
38#define NATIVE_THREAD_CREATE_JOINABLE MY_THREAD_CREATE_JOINABLE
39#endif
40
42
43/**
44 @class My_xp_thread
45
46 Abstract class used to wrap mutex for various platforms.
47
48 A typical use case is:
49
50 @code{.cpp}
51
52 My_xp_thread *thread= new My_xp_thread_impl();
53 thread->create(key, NULL, &function, &args);
54
55 void *result;
56 thread->join(&result);
57
58 @endcode
59*/
61 public:
62 /**
63 Creates thread.
64
65 @param key thread instrumentation key
66 @param attr thread attributes
67 @param func routine function
68 @param arg function parameters
69 @return success status
70 */
71
73 native_start_routine func, void *arg) = 0;
74
75 /**
76 Creates a detached thread.
77
78 @param key thread instrumentation key
79 @param attr thread attributes
80 @param func routine function
81 @param arg function parameters
82 @return success status
83 */
84
86 native_start_routine func, void *arg) = 0;
87
88 /**
89 Suspend invoking thread until this thread terminates.
90
91 @param value_ptr pointer for a placeholder for the terminating thread status
92 @return success status
93 */
94
95 virtual int join(void **value_ptr) = 0;
96
97 /**
98 Cancel this thread.
99
100 @return success status
101 */
102
103 virtual int cancel() = 0;
104
105 /**
106 Retrieves native thread reference
107
108 @return native thread pointer
109 */
110
112
113 virtual ~My_xp_thread() = default;
114};
115
116#ifndef XCOM_STANDALONE
118 public:
119 explicit My_xp_thread_server();
120 ~My_xp_thread_server() override;
121
123 native_start_routine func, void *arg) override;
125 native_start_routine func, void *arg) override;
126 int join(void **value_ptr) override;
127 int cancel() override;
129
130 protected:
132};
133#endif
134
135#ifndef XCOM_STANDALONE
137#endif
138{
139 public:
140 explicit My_xp_thread_impl() = default;
141 ~My_xp_thread_impl() override = default;
142};
143
145 public:
146 /**
147 Initialize a MySQL context on the invoking thread.
148
149 @return success status
150 */
151
152 static bool init();
153
154 /**
155 Terminate invoking thread.
156
157 @param value_ptr thread exit value pointer
158 */
159
160 static void exit(void *value_ptr);
161
162 /**
163 Initialize thread attributes object.
164
165 @param attr thread attributes
166 @return success status
167 */
168
169 static int attr_init(native_thread_attr_t *attr);
170
171 /**
172 Destroy thread attributes object.
173
174 @param attr thread attributes
175 @return success status
176 */
177
178 static int attr_destroy(native_thread_attr_t *attr);
179
180 /**
181 Retrieve current thread id.
182
183 @return current thread id
184 */
185
186 static native_thread_t self();
187
188 /**
189 Compares two thread identifiers.
190
191 @param t1 identifier of one thread
192 @param t2 identifier of another thread
193 @retval 0 if ids are different
194 @retval some other value if ids are equal
195 */
196
197 static int equal(native_thread_t t1, native_thread_t t2);
198
199 /**
200 Sets the stack size attribute of the thread attributes object referred
201 to by attr to the value specified in stacksize.
202
203 @param attr thread attributes
204 @param stacksize new attribute stack size
205 @retval 0 on success
206 @retval nonzero error number, on error
207 */
208
209 static int attr_setstacksize(native_thread_attr_t *attr, size_t stacksize);
210
211 /**
212 Returns the stack size attribute of the thread attributes object referred
213 to by attr in the buffer pointed to by stacksize.
214
215 @param attr thread attributes
216 @param stacksize pointer to attribute stack size returning placeholder
217 @retval 0 on success
218 @retval nonzero error number, on error
219 */
220
221 static int attr_getstacksize(native_thread_attr_t *attr, size_t *stacksize);
222
223 /**
224 Sets the detach state attribute of the thread attributes object referred
225 to by attr to the value specified in detachstate.
226
227 @param attr thread attributes
228 @param detachstate determines if the thread is to be created in a joinable
229 (MY_THREAD_CREATE_JOINABLE) or a detached state (MY_THREAD_CREATE_DETACHED)
230 @retval 0 on success
231 @retval nonzero error number, on error
232 */
233
234 static int attr_setdetachstate(native_thread_attr_t *attr, int detachstate);
235
236 /**
237 Causes the calling thread to relinquish the CPU, and to be moved to the
238 end of the queue and another thread gets to run.
239 */
240
241 static void yield();
242};
243
244#endif // MY_XP_THREAD_INCLUDED
Definition: my_xp_thread.h:138
My_xp_thread_impl()=default
~My_xp_thread_impl() override=default
Definition: my_xp_thread.h:117
int join(void **value_ptr) override
Suspend invoking thread until this thread terminates.
Definition: my_xp_thread.cc:68
native_thread_t * get_native_thread() override
Retrieves native thread reference.
Definition: my_xp_thread.cc:37
int cancel() override
Cancel this thread.
Definition: my_xp_thread.cc:72
~My_xp_thread_server() override
Definition: my_xp_thread.cc:35
My_xp_thread_server()
Definition: my_xp_thread.cc:31
int create(PSI_thread_key key, const native_thread_attr_t *attr, native_start_routine func, void *arg) override
Creates thread.
Definition: my_xp_thread.cc:41
int create_detached(PSI_thread_key key, native_thread_attr_t *attr, native_start_routine func, void *arg) override
Creates a detached thread.
Definition: my_xp_thread.cc:47
native_thread_handle * m_thread_handle
Definition: my_xp_thread.h:131
Definition: my_xp_thread.h:144
static void exit(void *value_ptr)
Terminate invoking thread.
Definition: my_xp_thread.cc:76
static int attr_destroy(native_thread_attr_t *attr)
Destroy thread attributes object.
Definition: my_xp_thread.cc:85
static int attr_setstacksize(native_thread_attr_t *attr, size_t stacksize)
Sets the stack size attribute of the thread attributes object referred to by attr to the value specif...
Definition: my_xp_thread.cc:95
static int attr_init(native_thread_attr_t *attr)
Initialize thread attributes object.
Definition: my_xp_thread.cc:81
static void yield()
Causes the calling thread to relinquish the CPU, and to be moved to the end of the queue and another ...
Definition: my_xp_thread.cc:110
static int attr_getstacksize(native_thread_attr_t *attr, size_t *stacksize)
Returns the stack size attribute of the thread attributes object referred to by attr in the buffer po...
Definition: my_xp_thread.cc:105
static int attr_setdetachstate(native_thread_attr_t *attr, int detachstate)
Sets the detach state attribute of the thread attributes object referred to by attr to the value spec...
Definition: my_xp_thread.cc:100
static bool init()
Initialize a MySQL context on the invoking thread.
Definition: my_xp_thread.cc:74
static int equal(native_thread_t t1, native_thread_t t2)
Compares two thread identifiers.
Definition: my_xp_thread.cc:91
Abstract class used to wrap mutex for various platforms.
Definition: my_xp_thread.h:60
virtual int create(PSI_thread_key key, const native_thread_attr_t *attr, native_start_routine func, void *arg)=0
Creates thread.
virtual ~My_xp_thread()=default
virtual int create_detached(PSI_thread_key key, native_thread_attr_t *attr, native_start_routine func, void *arg)=0
Creates a detached thread.
virtual int join(void **value_ptr)=0
Suspend invoking thread until this thread terminates.
virtual native_thread_t * get_native_thread()=0
Retrieves native thread reference.
virtual int cancel()=0
Cancel this thread.
unsigned int PSI_thread_key
Instrumented thread key.
Definition: psi_thread_bits.h:49
Common header for many mysys elements.
Defines to make different thread packages compatible.
void *(* my_start_routine)(void *)
Definition: my_thread.h:71
pthread_attr_t my_thread_attr_t
Definition: my_thread_bits.h:48
pthread_t my_thread_t
Definition: my_thread_bits.h:47
my_thread_t native_thread_t
Definition: my_xp_thread.h:32
my_start_routine native_start_routine
Definition: my_xp_thread.h:35
my_thread_attr_t native_thread_attr_t
Definition: my_xp_thread.h:34
my_thread_handle native_thread_handle
Definition: my_xp_thread.h:33
Performance schema instrumentation interface.
required string key
Definition: replication_asynchronous_connection_failover.proto:59
Definition: my_thread_bits.h:57