/****************************************************** 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, or NULL */ 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