1 /***************************************************************************** 2 3 Copyright (c) 1995, 2009, Innobase Oy. All Rights Reserved. 4 5 This program is free software; you can redistribute it and/or modify it under 6 the terms of the GNU General Public License as published by the Free Software 7 Foundation; version 2 of the License. 8 9 This program is distributed in the hope that it will be useful, but WITHOUT 10 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 11 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 12 13 You should have received a copy of the GNU General Public License along with 14 this program; if not, write to the Free Software Foundation, Inc., 15 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 16 17 *****************************************************************************/ 18 19 /**************************************************//** 20 @file include/os0thread.h 21 The interface to the operating system 22 process and thread control primitives 23 24 Created 9/8/1995 Heikki Tuuri 25 *******************************************************/ 26 27 #ifndef os0thread_h 28 #define os0thread_h 29 30 #include "univ.i" 31 32 /* Maximum number of threads which can be created in the program; 33 this is also the size of the wait slot array for MySQL threads which 34 can wait inside InnoDB */ 35 36 #define OS_THREAD_MAX_N srv_max_n_threads 37 38 39 /* Possible fixed priorities for threads */ 40 #define OS_THREAD_PRIORITY_NONE 100 41 #define OS_THREAD_PRIORITY_BACKGROUND 1 42 #define OS_THREAD_PRIORITY_NORMAL 2 43 #define OS_THREAD_PRIORITY_ABOVE_NORMAL 3 44 45 #ifdef __WIN__ 46 typedef void* os_thread_t; 47 typedef unsigned long os_thread_id_t; /*!< In Windows the thread id 48 is an unsigned long int */ 49 #else 50 typedef pthread_t os_thread_t; 51 typedef os_thread_t os_thread_id_t; /*!< In Unix we use the thread 52 handle itself as the id of 53 the thread */ 54 #endif 55 56 /* Define a function pointer type to use in a typecast */ 57 typedef void* (*os_posix_f_t) (void*); 58 59 #ifdef HAVE_PSI_INTERFACE 60 /* Define for performance schema registration key */ 61 typedef unsigned int mysql_pfs_key_t; 62 #endif 63 64 /***************************************************************//** 65 Compares two thread ids for equality. 66 @return TRUE if equal */ 67 UNIV_INTERN 68 ibool 69 os_thread_eq( 70 /*=========*/ 71 os_thread_id_t a, /*!< in: OS thread or thread id */ 72 os_thread_id_t b); /*!< in: OS thread or thread id */ 73 /****************************************************************//** 74 Converts an OS thread id to a ulint. It is NOT guaranteed that the ulint is 75 unique for the thread though! 76 @return thread identifier as a number */ 77 UNIV_INTERN 78 ulint 79 os_thread_pf( 80 /*=========*/ 81 os_thread_id_t a); /*!< in: OS thread identifier */ 82 /****************************************************************//** 83 Creates a new thread of execution. The execution starts from 84 the function given. The start function takes a void* parameter 85 and returns a ulint. 86 NOTE: We count the number of threads in os_thread_exit(). A created 87 thread should always use that to exit and not use return() to exit. 88 @return handle to the thread */ 89 UNIV_INTERN 90 os_thread_t 91 os_thread_create( 92 /*=============*/ 93 #ifndef __WIN__ 94 os_posix_f_t start_f, 95 #else 96 ulint (*start_f)(void*), /*!< in: pointer to function 97 from which to start */ 98 #endif 99 void* arg, /*!< in: argument to start 100 function */ 101 os_thread_id_t* thread_id); /*!< out: id of the created 102 thread, or NULL */ 103 104 /*****************************************************************//** 105 Exits the current thread. */ 106 UNIV_INTERN 107 void 108 os_thread_exit( 109 /*===========*/ 110 void* exit_value) /*!< in: exit value; in Windows this void* 111 is cast as a DWORD */ 112 UNIV_COLD __attribute__((noreturn)); 113 /*****************************************************************//** 114 Returns the thread identifier of current thread. 115 @return current thread identifier */ 116 UNIV_INTERN 117 os_thread_id_t 118 os_thread_get_curr_id(void); 119 /*========================*/ 120 /*****************************************************************//** 121 Advises the os to give up remainder of the thread's time slice. */ 122 UNIV_INTERN 123 void 124 os_thread_yield(void); 125 /*=================*/ 126 /*****************************************************************//** 127 The thread sleeps at least the time given in microseconds. */ 128 UNIV_INTERN 129 void 130 os_thread_sleep( 131 /*============*/ 132 ulint tm); /*!< in: time in microseconds */ 133 134 #ifndef UNIV_NONINL 135 #include "os0thread.ic" 136 #endif 137 138 #endif 139