/****************************************************** 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 */ #define OS_THREAD_MAX_N 1000 /* 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; #else typedef pthread_t os_thread_t; #endif typedef unsigned long int os_thread_id_t; /* Define a function pointer type to use in a typecast */ typedef void* (*os_posix_f_t) (void*); /******************************************************************** Creates a new thread of execution. The execution starts from the function given. The start function takes a void* parameter and returns a ulint. */ 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 created thread */ /********************************************************************* A thread calling this function ends its execution. */ void os_thread_exit( /*===========*/ ulint code); /* in: exit code */ /********************************************************************* 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); /*====================*/ /********************************************************************* Converts a thread id to a ulint. */ ulint os_thread_conv_id_to_ulint( /*=======================*/ /* out: converted to ulint */ os_thread_id_t id); /* in: thread id */ /********************************************************************* Waits for a thread to terminate. */ void os_thread_wait( /*===========*/ os_thread_t thread); /* in: thread to wait */ /********************************************************************* 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