28 #include "os0thread.ic"
34 #include <sys/select.h>
37 #ifndef UNIV_HOTBACKUP
58 if (pthread_equal(a, b)) {
80 return((ulint)(a.field1));
97 return(GetCurrentThreadId());
99 return(pthread_self());
113 os_posix_f_t start_f,
115 ulint (*start_f)(
void*),
131 thread = CreateThread(NULL,
133 (LPTHREAD_START_ROUTINE)start_f,
139 *thread_id = win_thread_id;
149 pthread_attr_init(&attr);
158 ret = pthread_attr_setstacksize(&attr,
159 (
size_t)(PTHREAD_STACK_MIN
163 "InnoDB: Error: pthread_attr_setstacksize"
164 " returned %d\n", ret);
173 ret = pthread_create(&pthread, pthread_attr_default, start_f, arg);
175 ret = pthread_create(&pthread, &attr, start_f, arg);
179 "InnoDB: Error: pthread_create returned %d\n", ret);
184 pthread_attr_destroy(&attr);
188 *thread_id = pthread;
204 #ifdef UNIV_DEBUG_THREAD_CREATION
205 fprintf(stderr,
"Thread exits, id %lu\n",
209 #ifdef UNIV_PFS_THREAD
218 ExitThread((DWORD)exit_value);
220 pthread_detach(pthread_self());
221 pthread_exit(exit_value);
234 return(GetCurrentThread());
236 return(pthread_self());
249 #elif (defined(HAVE_SCHED_YIELD) && defined(HAVE_SCHED_H))
251 #elif defined(HAVE_PTHREAD_YIELD_ZERO_ARG)
253 #elif defined(HAVE_PTHREAD_YIELD_ONE_ARG)
270 Sleep((DWORD) tm / 1000);
274 t.tv_sec = tm / 1000000;
275 t.tv_usec = tm % 1000000;
277 select(0, NULL, NULL, NULL, &t);
281 #ifndef UNIV_HOTBACKUP
294 if (pri == OS_THREAD_PRIORITY_BACKGROUND) {
295 os_pri = THREAD_PRIORITY_BELOW_NORMAL;
296 }
else if (pri == OS_THREAD_PRIORITY_NORMAL) {
297 os_pri = THREAD_PRIORITY_NORMAL;
298 }
else if (pri == OS_THREAD_PRIORITY_ABOVE_NORMAL) {
299 os_pri = THREAD_PRIORITY_HIGHEST;
304 ut_a(SetThreadPriority(handle, os_pri));
325 os_pri = GetThreadPriority(handle);
327 if (os_pri == THREAD_PRIORITY_BELOW_NORMAL) {
328 pri = OS_THREAD_PRIORITY_BACKGROUND;
329 }
else if (os_pri == THREAD_PRIORITY_NORMAL) {
330 pri = OS_THREAD_PRIORITY_NORMAL;
331 }
else if (os_pri == THREAD_PRIORITY_HIGHEST) {
332 pri = OS_THREAD_PRIORITY_ABOVE_NORMAL;
352 return(GetLastError());
UNIV_INTERN void os_thread_set_priority(os_thread_t handle, ulint pri)
UNIV_INTERN os_thread_t os_thread_create(os_posix_f_t start_f, void *arg, os_thread_id_t *thread_id)
UNIV_INTERN void os_mutex_enter(os_mutex_t mutex)
UNIV_INTERN os_thread_t os_thread_get_curr(void)
UNIV_INTERN ulint os_thread_get_last_error(void)
UNIV_INTERN void os_thread_yield(void)
UNIV_INTERN void os_mutex_exit(os_mutex_t mutex)
UNIV_INTERN void os_thread_sleep(ulint tm)
os_thread_t os_thread_id_t
UNIV_INTERN ulint os_thread_get_priority(os_thread_t handle)
UNIV_INTERN os_thread_id_t os_thread_get_curr_id(void)
UNIV_INTERN void os_thread_exit(void *exit_value)
UNIV_INTERN ulint os_thread_pf(os_thread_id_t a)
UNIV_INTERN ibool os_thread_eq(os_thread_id_t a, os_thread_id_t b)