diff options
Diffstat (limited to 'storage/innobase/include/os0thread.h')
-rw-r--r-- | storage/innobase/include/os0thread.h | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/storage/innobase/include/os0thread.h b/storage/innobase/include/os0thread.h new file mode 100644 index 00000000000..c00d28baf60 --- /dev/null +++ b/storage/innobase/include/os0thread.h @@ -0,0 +1,145 @@ +/****************************************************** +The interface to the operating system +process and thread control primitives + +(c) 1995 Innobase Oy + +Created 9/8/1995 Heikki Tuuri +*******************************************************/ + +#ifndef os0thread_h +#define os0thread_h + +#include "univ.i" + +/* Maximum number of threads which can be created in the program; +this is also the size of the wait slot array for MySQL threads which +can wait inside InnoDB */ + +#define OS_THREAD_MAX_N srv_max_n_threads + + +/* 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 __WIN__ +typedef void* os_thread_t; +typedef ulint os_thread_id_t; /* In Windows the thread id + is an unsigned long int */ +#else +typedef pthread_t os_thread_t; +typedef os_thread_t os_thread_id_t; /* In Unix we use the thread + handle itself as the id of + the thread */ +#endif + +/* Define a function pointer type to use in a typecast */ +typedef void* (*os_posix_f_t) (void*); + +/******************************************************************* +Compares two thread ids for equality. */ + +ibool +os_thread_eq( +/*=========*/ + /* out: TRUE if equal */ + os_thread_id_t a, /* in: OS thread or thread id */ + os_thread_id_t b); /* in: OS thread or thread id */ +/******************************************************************** +Converts an OS thread id to a ulint. It is NOT guaranteed that the ulint is +unique for the thread though! */ + +ulint +os_thread_pf( +/*=========*/ + /* out: unsigned long int */ + os_thread_id_t a); /* in: thread or thread id */ +/******************************************************************** +Creates a new thread of execution. The execution starts from +the function given. The start function takes a void* parameter +and returns a ulint. +NOTE: We count the number of threads in os_thread_exit(). A created +thread should always use that to exit and not use return() to exit. */ + +os_thread_t +os_thread_create( +/*=============*/ + /* out: handle to the thread */ +#ifndef __WIN__ + os_posix_f_t start_f, +#else + ulint (*start_f)(void*), /* in: pointer to function + from which to start */ +#endif + void* arg, /* in: argument to start + function */ + os_thread_id_t* thread_id); /* out: id of the created + thread */ +int +os_thread_join( +/*=============*/ + os_thread_id_t thread_id); /* in: id of the thread to join */ +/********************************************************************* +Exits the current thread. */ + +void +os_thread_exit( +/*===========*/ + void* exit_value); /* in: exit value; in Windows this void* + is cast as a DWORD */ +/********************************************************************* +Returns the thread identifier of current thread. */ + +os_thread_id_t +os_thread_get_curr_id(void); +/*========================*/ +/********************************************************************* +Returns handle to the current thread. */ + +os_thread_t +os_thread_get_curr(void); +/*====================*/ +/********************************************************************* +Advises the os to give up remainder of the thread's time slice. */ + +void +os_thread_yield(void); +/*=================*/ +/********************************************************************* +The thread sleeps at least the time given in microseconds. */ + +void +os_thread_sleep( +/*============*/ + ulint tm); /* in: time in microseconds */ +/********************************************************************** +Gets a thread priority. */ + +ulint +os_thread_get_priority( +/*===================*/ + /* out: priority */ + os_thread_t handle);/* in: OS handle to the thread */ +/********************************************************************** +Sets a thread priority. */ + +void +os_thread_set_priority( +/*===================*/ + os_thread_t handle, /* in: OS handle to the thread */ + ulint pri); /* in: priority: one of OS_PRIORITY_... */ +/********************************************************************** +Gets the last operating system error code for the calling thread. */ + +ulint +os_thread_get_last_error(void); +/*==========================*/ + +#ifndef UNIV_NONINL +#include "os0thread.ic" +#endif + +#endif |