1 /*
2 * \brief Thread facility
3 * \author Christian Helmuth
4 * \date 2008-10-20
5 */
6
7 /*
8 * Copyright (C) 2008-2013 Genode Labs GmbH
9 *
10 * This file is part of the Genode OS framework, which is distributed
11 * under the terms of the GNU General Public License version 2.
12 */
13
14 #ifndef _INCLUDE__DDE_KIT__THREAD_H_
15 #define _INCLUDE__DDE_KIT__THREAD_H_
16
17 #include <dde_kit/lock.h>
18
19 struct dde_kit_thread;
20
21 /**
22 * Create thread
23 *
24 * \param fun thread function
25 * \param arg argument to thread function, set to NULL if not needed
26 * \param name thread name
27 *
28 * \return thread handle
29 *
30 * Create a new thread running the specified function with argument arg. The
31 * thread is assigned the given name.
32 *
33 * All DDE kit threads support thread-local storage where one data pointer may
34 * be stored and retrieved.
35 */
36 struct dde_kit_thread * dde_kit_thread_create(void (*fun)(void *), void *arg, const char *name);
37
38 /**
39 * Adopt calling as DDE kit thread
40 *
41 * \param name thread name
42 *
43 * \return thread handle
44 */
45 struct dde_kit_thread * dde_kit_thread_adopt_myself(const char *name);
46
47 /**
48 * Get handle of current thread
49 *
50 * \return thread handle
51 */
52 struct dde_kit_thread * dde_kit_thread_myself(void);
53
54 /**
55 * Get thread-local data of a specific thread
56 *
57 * \param thread thread handle
58 *
59 * \return thread-local data of this thread
60 */
61 void * dde_kit_thread_get_data(struct dde_kit_thread * thread);
62
63 /**
64 * Get thread-local data of current thread
65 *
66 * \return thread-local data of current thread
67 */
68 void * dde_kit_thread_get_my_data(void);
69
70 /**
71 * Set thread-local data of specific thread
72 *
73 * \param thread thread handle
74 * \param data thread-local data pointer
75 */
76 void dde_kit_thread_set_data(struct dde_kit_thread *thread, void *data);
77
78 /**
79 * Set thread-local data of current thread
80 *
81 * \param data thread-local data pointer
82 */
83 void dde_kit_thread_set_my_data(void *data);
84
85 /**
86 * Sleep (milliseconds)
87 *
88 * \param msecs time to sleep in milliseconds
89 */
90 void dde_kit_thread_msleep(unsigned long msecs);
91
92 /**
93 * Sleep (microseconds)
94 *
95 * \param usecs time to sleep in microseconds
96 */
97 void dde_kit_thread_usleep(unsigned long usecs);
98
99 /**
100 * Sleep (nanoseconds)
101 *
102 * \param nsecs time to sleep in nanoseconds
103 */
104 void dde_kit_thread_nsleep(unsigned long nsecs);
105
106 /**
107 * Exit current thread
108 */
109 void dde_kit_thread_exit(void);
110
111 /**
112 * Get thread name
113 *
114 * \param thread thread handle
115 */
116 const char *dde_kit_thread_get_name(struct dde_kit_thread *thread);
117
118 /**
119 * Get unique ID
120 *
121 * \param thread thread handle
122 * \return artificial thread ID
123 *
124 * DDE kit does not allow direct access to the thread data structure, since
125 * this struct contains platform-specific data types. However, applications
126 * might want to get some kind of ID related to a dde_kit_thread, for instance
127 * to use it as a Linux-like PID.
128 *
129 * XXX This function may be removed.
130 */
131 int dde_kit_thread_get_id(struct dde_kit_thread *thread);
132
133 /**
134 * Hint that this thread is done and may be scheduled somehow
135 */
136 void dde_kit_thread_schedule(void);
137
138 #endif /* _INCLUDE__DDE_KIT__THREAD_H_ */