MySQL 8.0.33
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 Terminate invoking thread.
148
149 @param value_ptr thread exit value pointer
150 */
151
152 static void exit(void *value_ptr);
153
154 /**
155 Initialize thread attributes object.
156
157 @param attr thread attributes
158 @return success status
159 */
160
161 static int attr_init(native_thread_attr_t *attr);
162
163 /**
164 Destroy thread attributes object.
165
166 @param attr thread attributes
167 @return success status
168 */
169
170 static int attr_destroy(native_thread_attr_t *attr);
171
172 /**
173 Retrieve current thread id.
174
175 @return current thread id
176 */
177
178 static native_thread_t self();
179
180 /**
181 Compares two thread identifiers.
182
183 @param t1 identifier of one thread
184 @param t2 identifier of another thread
185 @retval 0 if ids are different
186 @retval some other value if ids are equal
187 */
188
189 static int equal(native_thread_t t1, native_thread_t t2);
190
191 /**
192 Sets the stack size attribute of the thread attributes object referred
193 to by attr to the value specified in stacksize.
194
195 @param attr thread attributes
196 @param stacksize new attribute stack size
197 @retval 0 on success
198 @retval nonzero error number, on error
199 */
200
201 static int attr_setstacksize(native_thread_attr_t *attr, size_t stacksize);
202
203 /**
204 Returns the stack size attribute of the thread attributes object referred
205 to by attr in the buffer pointed to by stacksize.
206
207 @param attr thread attributes
208 @param stacksize pointer to attribute stack size returning placeholder
209 @retval 0 on success
210 @retval nonzero error number, on error
211 */
212
213 static int attr_getstacksize(native_thread_attr_t *attr, size_t *stacksize);
214
215 /**
216 Sets the detach state attribute of the thread attributes object referred
217 to by attr to the value specified in detachstate.
218
219 @param attr thread attributes
220 @param detachstate determines if the thread is to be created in a joinable
221 (MY_THREAD_CREATE_JOINABLE) or a detached state (MY_THREAD_CREATE_DETACHED)
222 @retval 0 on success
223 @retval nonzero error number, on error
224 */
225
226 static int attr_setdetachstate(native_thread_attr_t *attr, int detachstate);
227
228 /**
229 Causes the calling thread to relinquish the CPU, and to be moved to the
230 end of the queue and another thread gets to run.
231 */
232
233 static void yield();
234};
235
236#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:74
static int attr_destroy(native_thread_attr_t *attr)
Destroy thread attributes object.
Definition: my_xp_thread.cc:83
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:93
static int attr_init(native_thread_attr_t *attr)
Initialize thread attributes object.
Definition: my_xp_thread.cc:79
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:108
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:103
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:98
static int equal(native_thread_t t1, native_thread_t t2)
Compares two thread identifiers.
Definition: my_xp_thread.cc:89
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:51