1
by brian
clean slate |
1 |
/******************************************************
|
2 |
The interface to the operating system
|
|
3 |
process and thread control primitives
|
|
4 |
||
5 |
(c) 1995 Innobase Oy
|
|
6 |
||
7 |
Created 9/8/1995 Heikki Tuuri
|
|
8 |
*******************************************************/
|
|
9 |
||
10 |
#ifndef os0thread_h
|
|
11 |
#define os0thread_h
|
|
12 |
||
13 |
#include "univ.i" |
|
14 |
||
15 |
/* Maximum number of threads which can be created in the program;
|
|
16 |
this is also the size of the wait slot array for MySQL threads which
|
|
17 |
can wait inside InnoDB */
|
|
18 |
||
19 |
#define OS_THREAD_MAX_N srv_max_n_threads
|
|
20 |
||
21 |
||
22 |
/* Possible fixed priorities for threads */
|
|
23 |
#define OS_THREAD_PRIORITY_NONE 100
|
|
24 |
#define OS_THREAD_PRIORITY_BACKGROUND 1
|
|
25 |
#define OS_THREAD_PRIORITY_NORMAL 2
|
|
26 |
#define OS_THREAD_PRIORITY_ABOVE_NORMAL 3
|
|
27 |
||
28 |
#ifdef __WIN__
|
|
29 |
typedef void* os_thread_t; |
|
30 |
typedef ulint os_thread_id_t; /* In Windows the thread id |
|
31 |
is an unsigned long int */
|
|
32 |
#else
|
|
33 |
typedef pthread_t os_thread_t; |
|
34 |
typedef os_thread_t os_thread_id_t; /* In Unix we use the thread |
|
35 |
handle itself as the id of
|
|
36 |
the thread */
|
|
37 |
#endif
|
|
38 |
||
39 |
/* Define a function pointer type to use in a typecast */
|
|
40 |
typedef void* (*os_posix_f_t) (void*); |
|
41 |
||
42 |
/*******************************************************************
|
|
43 |
Compares two thread ids for equality. */
|
|
44 |
||
45 |
ibool
|
|
46 |
os_thread_eq( |
|
47 |
/*=========*/
|
|
48 |
/* out: TRUE if equal */
|
|
49 |
os_thread_id_t a, /* in: OS thread or thread id */ |
|
50 |
os_thread_id_t b); /* in: OS thread or thread id */ |
|
51 |
/********************************************************************
|
|
52 |
Converts an OS thread id to a ulint. It is NOT guaranteed that the ulint is
|
|
53 |
unique for the thread though! */
|
|
54 |
||
55 |
ulint
|
|
56 |
os_thread_pf( |
|
57 |
/*=========*/
|
|
58 |
/* out: unsigned long int */
|
|
59 |
os_thread_id_t a); /* in: thread or thread id */ |
|
60 |
/********************************************************************
|
|
61 |
Creates a new thread of execution. The execution starts from
|
|
62 |
the function given. The start function takes a void* parameter
|
|
63 |
and returns a ulint.
|
|
64 |
NOTE: We count the number of threads in os_thread_exit(). A created
|
|
65 |
thread should always use that to exit and not use return() to exit. */
|
|
66 |
||
67 |
os_thread_t
|
|
68 |
os_thread_create( |
|
69 |
/*=============*/
|
|
70 |
/* out: handle to the thread */
|
|
71 |
#ifndef __WIN__
|
|
72 |
os_posix_f_t start_f, |
|
73 |
#else
|
|
74 |
ulint (*start_f)(void*), /* in: pointer to function |
|
75 |
from which to start */
|
|
76 |
#endif
|
|
77 |
void* arg, /* in: argument to start |
|
78 |
function */
|
|
79 |
os_thread_id_t* thread_id); /* out: id of the created |
|
80 |
thread, or NULL */
|
|
81 |
int
|
|
82 |
os_thread_join( |
|
83 |
/*===========*/
|
|
84 |
os_thread_id_t thread_id); /* in: id of the thread to join */ |
|
85 |
/*********************************************************************
|
|
86 |
Exits the current thread. */
|
|
87 |
||
88 |
void
|
|
89 |
os_thread_exit( |
|
90 |
/*===========*/
|
|
91 |
void* exit_value); /* in: exit value; in Windows this void* |
|
92 |
is cast as a DWORD */
|
|
93 |
/*********************************************************************
|
|
94 |
Returns the thread identifier of current thread. */
|
|
95 |
||
96 |
os_thread_id_t
|
|
97 |
os_thread_get_curr_id(void); |
|
98 |
/*========================*/
|
|
99 |
/*********************************************************************
|
|
100 |
Returns handle to the current thread. */
|
|
101 |
||
102 |
os_thread_t
|
|
103 |
os_thread_get_curr(void); |
|
104 |
/*====================*/
|
|
105 |
/*********************************************************************
|
|
106 |
Advises the os to give up remainder of the thread's time slice. */
|
|
107 |
||
108 |
void
|
|
109 |
os_thread_yield(void); |
|
110 |
/*=================*/
|
|
111 |
/*********************************************************************
|
|
112 |
The thread sleeps at least the time given in microseconds. */
|
|
113 |
||
114 |
void
|
|
115 |
os_thread_sleep( |
|
116 |
/*============*/
|
|
117 |
ulint tm); /* in: time in microseconds */ |
|
118 |
/**********************************************************************
|
|
119 |
Gets a thread priority. */
|
|
120 |
||
121 |
ulint
|
|
122 |
os_thread_get_priority( |
|
123 |
/*===================*/
|
|
124 |
/* out: priority */
|
|
125 |
os_thread_t handle);/* in: OS handle to the thread */ |
|
126 |
/**********************************************************************
|
|
127 |
Sets a thread priority. */
|
|
128 |
||
129 |
void
|
|
130 |
os_thread_set_priority( |
|
131 |
/*===================*/
|
|
132 |
os_thread_t handle, /* in: OS handle to the thread */ |
|
133 |
ulint pri); /* in: priority: one of OS_PRIORITY_... */ |
|
134 |
/**********************************************************************
|
|
135 |
Gets the last operating system error code for the calling thread. */
|
|
136 |
||
137 |
ulint
|
|
138 |
os_thread_get_last_error(void); |
|
139 |
/*==========================*/
|
|
140 |
||
141 |
#ifndef UNIV_NONINL
|
|
142 |
#include "os0thread.ic" |
|
143 |
#endif
|
|
144 |
||
145 |
#endif
|