diff options
Diffstat (limited to 'storage/innobase/include/os0thread.h')
-rw-r--r-- | storage/innobase/include/os0thread.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/storage/innobase/include/os0thread.h b/storage/innobase/include/os0thread.h new file mode 100644 index 00000000..ed989045 --- /dev/null +++ b/storage/innobase/include/os0thread.h @@ -0,0 +1,98 @@ +/***************************************************************************** + +Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2017, 2020, MariaDB Corporation. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA + +*****************************************************************************/ + +/**************************************************//** +@file include/os0thread.h +The interface to the operating system +process and thread control primitives + +Created 9/8/1995 Heikki Tuuri +*******************************************************/ + +#ifndef os0thread_h +#define os0thread_h + +#include "univ.i" + +/* Possible fixed priorities for threads */ +#define OS_THREAD_PRIORITY_NONE 100 +#define OS_THREAD_PRIORITY_BACKGROUND 1 +#define OS_THREAD_PRIORITY_NORMAL 2 +#define OS_THREAD_PRIORITY_ABOVE_NORMAL 3 + +#ifdef _WIN32 +typedef DWORD os_thread_t; +typedef DWORD os_thread_id_t; /*!< In Windows the thread id + is an unsigned long int */ +extern "C" { +typedef LPTHREAD_START_ROUTINE os_thread_func_t; +} + +/** Macro for specifying a Windows thread start function. */ +#define DECLARE_THREAD(func) WINAPI func +#else + +typedef pthread_t os_thread_t; +typedef pthread_t os_thread_id_t; /*!< In Unix we use the thread + handle itself as the id of + the thread */ +extern "C" { typedef void* (*os_thread_func_t)(void*); } + +/** Macro for specifying a POSIX thread start function. */ +#define DECLARE_THREAD(func) func +#endif /* _WIN32 */ + +/* Define a function pointer type to use in a typecast */ +typedef void* (*os_posix_f_t) (void*); + +#ifdef HAVE_PSI_INTERFACE +/* Define for performance schema registration key */ +typedef unsigned int mysql_pfs_key_t; +#endif /* HAVE_PSI_INTERFACE */ + +#ifndef _WIN32 +#define os_thread_eq(a,b) pthread_equal(a, b) +#define os_thread_yield() sched_yield() +#define os_thread_get_curr_id() pthread_self() +#else +bool os_thread_eq(os_thread_id_t a, os_thread_id_t b); +void os_thread_yield(); +os_thread_id_t os_thread_get_curr_id(); +#endif + +/****************************************************************//** +Creates a new thread of execution. The execution starts from +the function given. +NOTE: We count the number of threads in os_thread_exit(). A created +thread should always use that to exit so thatthe thread count will be +decremented. +We do not return an error code because if there is one, we crash here. */ +os_thread_t os_thread_create(os_thread_func_t func, void *arg= nullptr); + +/** Detach and terminate the current thread. */ +ATTRIBUTE_NORETURN void os_thread_exit(); + +/*****************************************************************//** +The thread sleeps at least the time given in microseconds. */ +void +os_thread_sleep( +/*============*/ + ulint tm); /*!< in: time in microseconds */ + +#endif |