File: synch_8h-source.html

package info (click to toggle)
xenomai 2.5.4-3squeeze1
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 36,140 kB
  • ctags: 35,509
  • sloc: ansic: 109,084; sh: 11,745; makefile: 2,205; xml: 1,356; asm: 613; php: 316; perl: 155
file content (266 lines) | stat: -rw-r--r-- 24,032 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Xenomai API: include/nucleus/synch.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.6 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="examples.html"><span>Examples</span></a></li>
    <li>
      <form action="search.php" method="get">
        <table cellspacing="0" cellpadding="0" border="0">
          <tr>
            <td><label>&nbsp;<u>S</u>earch&nbsp;for&nbsp;</label></td>
            <td><input type="text" name="query" value="" size="20" accesskey="s"/></td>
          </tr>
        </table>
      </form>
    </li>
    </ul>
  </div>
<h1>include/nucleus/synch.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment"> * @note Copyright (C) 2001,2002,2003 Philippe Gerum &lt;rpm@xenomai.org&gt;.</span>
<a name="l00003"></a>00003 <span class="comment"> *</span>
<a name="l00004"></a>00004 <span class="comment"> * Xenomai is free software; you can redistribute it and/or modify</span>
<a name="l00005"></a>00005 <span class="comment"> * it under the terms of the GNU General Public License as published</span>
<a name="l00006"></a>00006 <span class="comment"> * by the Free Software Foundation; either version 2 of the License,</span>
<a name="l00007"></a>00007 <span class="comment"> * or (at your option) any later version.</span>
<a name="l00008"></a>00008 <span class="comment"> *</span>
<a name="l00009"></a>00009 <span class="comment"> * Xenomai is distributed in the hope that it will be useful, but</span>
<a name="l00010"></a>00010 <span class="comment"> * WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00011"></a>00011 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
<a name="l00012"></a>00012 <span class="comment"> * General Public License for more details.</span>
<a name="l00013"></a>00013 <span class="comment"> *</span>
<a name="l00014"></a>00014 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
<a name="l00015"></a>00015 <span class="comment"> * along with Xenomai; if not, write to the Free Software</span>
<a name="l00016"></a>00016 <span class="comment"> * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA</span>
<a name="l00017"></a>00017 <span class="comment"> * 02111-1307, USA.</span>
<a name="l00018"></a>00018 <span class="comment"> *</span>
<a name="l00019"></a>00019 <span class="comment"> * \ingroup synch</span>
<a name="l00020"></a>00020 <span class="comment"> */</span>
<a name="l00021"></a>00021 
<a name="l00022"></a>00022 <span class="preprocessor">#ifndef _XENO_NUCLEUS_SYNCH_H</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#define _XENO_NUCLEUS_SYNCH_H</span>
<a name="l00024"></a>00024 <span class="preprocessor"></span>
<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;nucleus/queue.h&gt;</span>
<a name="l00026"></a>00026 
<a name="l00027"></a>00027 <span class="comment">/* Creation flags */</span>
<a name="l00028"></a>00028 <span class="preprocessor">#define XNSYNCH_FIFO    0x0</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define XNSYNCH_PRIO    0x1</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define XNSYNCH_NOPIP   0x0</span>
<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define XNSYNCH_PIP     0x2</span>
<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#define XNSYNCH_DREORD  0x4</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#define XNSYNCH_OWNER   0x8</span>
<a name="l00034"></a>00034 <span class="preprocessor"></span>
<a name="l00035"></a>00035 <span class="preprocessor">#ifndef CONFIG_XENO_OPT_DEBUG_SYNCH_RELAX</span>
<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define CONFIG_XENO_OPT_DEBUG_SYNCH_RELAX 0</span>
<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* CONFIG_XENO_OPT_DEBUG_SYNCH_RELAX */</span>
<a name="l00038"></a>00038 
<a name="l00039"></a>00039 <span class="preprocessor">#ifdef CONFIG_XENO_FASTSYNCH</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span>
<a name="l00041"></a>00041 <span class="comment">/* Fast lock API */</span>
<a name="l00042"></a>00042 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> xnsynch_fast_owner_check(xnarch_atomic_t *fastlock,
<a name="l00043"></a>00043                                            xnhandle_t ownerh)
<a name="l00044"></a>00044 {
<a name="l00045"></a>00045         <span class="keywordflow">return</span> (xnhandle_mask_spare(xnarch_atomic_get(fastlock)) == ownerh) ?
<a name="l00046"></a>00046                 0 : -EPERM;
<a name="l00047"></a>00047 }
<a name="l00048"></a>00048 
<a name="l00049"></a>00049 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> xnsynch_fast_acquire(xnarch_atomic_t *fastlock,
<a name="l00050"></a>00050                                        xnhandle_t new_ownerh)
<a name="l00051"></a>00051 {
<a name="l00052"></a>00052         xnhandle_t lock_state =
<a name="l00053"></a>00053             xnarch_atomic_cmpxchg(fastlock, XN_NO_HANDLE, new_ownerh);
<a name="l00054"></a>00054 
<a name="l00055"></a>00055         <span class="keywordflow">if</span> (likely(lock_state == XN_NO_HANDLE))
<a name="l00056"></a>00056                 <span class="keywordflow">return</span> 0;
<a name="l00057"></a>00057 
<a name="l00058"></a>00058         <span class="keywordflow">if</span> (xnhandle_mask_spare(lock_state) == new_ownerh)
<a name="l00059"></a>00059                 <span class="keywordflow">return</span> -EBUSY;
<a name="l00060"></a>00060 
<a name="l00061"></a>00061         <span class="keywordflow">return</span> -EAGAIN;
<a name="l00062"></a>00062 }
<a name="l00063"></a>00063 
<a name="l00064"></a>00064 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> xnsynch_fast_release(xnarch_atomic_t *fastlock,
<a name="l00065"></a>00065                                        xnhandle_t cur_ownerh)
<a name="l00066"></a>00066 {
<a name="l00067"></a>00067         <span class="keywordflow">return</span> (xnarch_atomic_cmpxchg(fastlock, cur_ownerh, XN_NO_HANDLE) ==
<a name="l00068"></a>00068                 cur_ownerh);
<a name="l00069"></a>00069 }
<a name="l00070"></a>00070 
<a name="l00071"></a>00071 <span class="preprocessor">#else </span><span class="comment">/* !CONFIG_XENO_FASTSYNCH */</span>
<a name="l00072"></a>00072 
<a name="l00073"></a>00073 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> xnsynch_fast_acquire(xnarch_atomic_t *fastlock,
<a name="l00074"></a>00074                                        xnhandle_t new_ownerh)
<a name="l00075"></a>00075 {
<a name="l00076"></a>00076         <span class="keywordflow">return</span> -ENOSYS;
<a name="l00077"></a>00077 }
<a name="l00078"></a>00078 
<a name="l00079"></a>00079 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> xnsynch_fast_release(xnarch_atomic_t *fastlock,
<a name="l00080"></a>00080                                        xnhandle_t cur_ownerh)
<a name="l00081"></a>00081 {
<a name="l00082"></a>00082         <span class="keywordflow">return</span> -1;
<a name="l00083"></a>00083 }
<a name="l00084"></a>00084 
<a name="l00085"></a>00085 <span class="preprocessor">#endif  </span><span class="comment">/* !CONFIG_XENO_FASTSYNCH */</span>
<a name="l00086"></a>00086 
<a name="l00087"></a>00087 <span class="preprocessor">#if defined(__KERNEL__) || defined(__XENO_SIM__)</span>
<a name="l00088"></a>00088 <span class="preprocessor"></span>
<a name="l00089"></a>00089 <span class="preprocessor">#define XNSYNCH_CLAIMED 0x10    </span><span class="comment">/* Claimed by other thread(s) w/ PIP */</span>
<a name="l00090"></a>00090 
<a name="l00091"></a>00091 <span class="preprocessor">#define XNSYNCH_FLCLAIM XN_HANDLE_SPARE3 </span><span class="comment">/* Corresponding bit in fast lock */</span>
<a name="l00092"></a>00092 
<a name="l00093"></a>00093 <span class="comment">/* Spare flags usable by upper interfaces */</span>
<a name="l00094"></a>00094 <span class="preprocessor">#define XNSYNCH_SPARE0  0x01000000</span>
<a name="l00095"></a>00095 <span class="preprocessor"></span><span class="preprocessor">#define XNSYNCH_SPARE1  0x02000000</span>
<a name="l00096"></a>00096 <span class="preprocessor"></span><span class="preprocessor">#define XNSYNCH_SPARE2  0x04000000</span>
<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="preprocessor">#define XNSYNCH_SPARE3  0x08000000</span>
<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#define XNSYNCH_SPARE4  0x10000000</span>
<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor">#define XNSYNCH_SPARE5  0x20000000</span>
<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="preprocessor">#define XNSYNCH_SPARE6  0x40000000</span>
<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="preprocessor">#define XNSYNCH_SPARE7  0x80000000</span>
<a name="l00102"></a>00102 <span class="preprocessor"></span>
<a name="l00103"></a>00103 <span class="comment">/* Statuses */</span>
<a name="l00104"></a>00104 <span class="preprocessor">#define XNSYNCH_DONE    0       </span><span class="comment">/* Resource available / operation complete */</span>
<a name="l00105"></a>00105 <span class="preprocessor">#define XNSYNCH_WAIT    1       </span><span class="comment">/* Calling thread blocked -- start rescheduling */</span>
<a name="l00106"></a>00106 <span class="preprocessor">#define XNSYNCH_RESCHED 2       </span><span class="comment">/* Force rescheduling */</span>
<a name="l00107"></a>00107 
<a name="l00108"></a>00108 <span class="keyword">struct </span>xnthread;
<a name="l00109"></a>00109 <span class="keyword">struct </span>xnsynch;
<a name="l00110"></a>00110 <span class="keyword">struct </span>xnmutex;
<a name="l00111"></a>00111 
<a name="l00112"></a>00112 <span class="keyword">typedef</span> <span class="keyword">struct </span>xnsynch {
<a name="l00113"></a>00113 
<a name="l00114"></a>00114     xnpholder_t link;   <span class="comment">/* Link in claim queues */</span>
<a name="l00115"></a>00115 
<a name="l00116"></a>00116 <span class="preprocessor">#define link2synch(ln)          container_of(ln, struct xnsynch, link)</span>
<a name="l00117"></a>00117 <span class="preprocessor"></span>
<a name="l00118"></a>00118     xnflags_t status;   <span class="comment">/* Status word */</span>
<a name="l00119"></a>00119 
<a name="l00120"></a>00120     xnpqueue_t pendq;   <span class="comment">/* Pending threads */</span>
<a name="l00121"></a>00121 
<a name="l00122"></a>00122     <span class="keyword">struct </span>xnthread *owner; <span class="comment">/* Thread which owns the resource */</span>
<a name="l00123"></a>00123 
<a name="l00124"></a>00124 <span class="preprocessor">#ifdef CONFIG_XENO_FASTSYNCH</span>
<a name="l00125"></a>00125 <span class="preprocessor"></span>    xnarch_atomic_t *fastlock; <span class="comment">/* Pointer to fast lock word */</span>
<a name="l00126"></a>00126 <span class="preprocessor">#endif </span><span class="comment">/* CONFIG_XENO_FASTSYNCH */</span>
<a name="l00127"></a>00127 
<a name="l00128"></a>00128     void (*cleanup)(<span class="keyword">struct </span>xnsynch *synch); <span class="comment">/* Cleanup handler */</span>
<a name="l00129"></a>00129 
<a name="l00130"></a>00130     XNARCH_DECL_DISPLAY_CONTEXT();
<a name="l00131"></a>00131 
<a name="l00132"></a>00132 } xnsynch_t;
<a name="l00133"></a>00133 
<a name="l00134"></a>00134 <span class="preprocessor">#define xnsynch_test_flags(synch,flags) testbits((synch)-&gt;status,flags)</span>
<a name="l00135"></a>00135 <span class="preprocessor"></span><span class="preprocessor">#define xnsynch_set_flags(synch,flags)  setbits((synch)-&gt;status,flags)</span>
<a name="l00136"></a>00136 <span class="preprocessor"></span><span class="preprocessor">#define xnsynch_clear_flags(synch,flags)        clrbits((synch)-&gt;status,flags)</span>
<a name="l00137"></a>00137 <span class="preprocessor"></span><span class="preprocessor">#define xnsynch_wait_queue(synch)               (&amp;((synch)-&gt;pendq))</span>
<a name="l00138"></a>00138 <span class="preprocessor"></span><span class="preprocessor">#define xnsynch_nsleepers(synch)                countpq(&amp;((synch)-&gt;pendq))</span>
<a name="l00139"></a>00139 <span class="preprocessor"></span><span class="preprocessor">#define xnsynch_pended_p(synch)         (!emptypq_p(&amp;((synch)-&gt;pendq)))</span>
<a name="l00140"></a>00140 <span class="preprocessor"></span><span class="preprocessor">#define xnsynch_owner(synch)            ((synch)-&gt;owner)</span>
<a name="l00141"></a>00141 <span class="preprocessor"></span>
<a name="l00142"></a>00142 <span class="preprocessor">#ifdef CONFIG_XENO_FASTSYNCH</span>
<a name="l00143"></a>00143 <span class="preprocessor"></span><span class="preprocessor">#define xnsynch_fastlock(synch)         ((synch)-&gt;fastlock)</span>
<a name="l00144"></a>00144 <span class="preprocessor"></span><span class="preprocessor">#define xnsynch_fastlock_p(synch)       ((synch)-&gt;fastlock != NULL)</span>
<a name="l00145"></a>00145 <span class="preprocessor"></span><span class="preprocessor">#define xnsynch_owner_check(synch, thread) \</span>
<a name="l00146"></a>00146 <span class="preprocessor">        xnsynch_fast_owner_check((synch)-&gt;fastlock, xnthread_handle(thread))</span>
<a name="l00147"></a>00147 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !CONFIG_XENO_FASTSYNCH */</span>
<a name="l00148"></a>00148 <span class="preprocessor">#define xnsynch_fastlock(synch)         ((xnarch_atomic_t *)NULL)</span>
<a name="l00149"></a>00149 <span class="preprocessor"></span><span class="preprocessor">#define xnsynch_fastlock_p(synch)       0</span>
<a name="l00150"></a>00150 <span class="preprocessor"></span><span class="preprocessor">#define xnsynch_owner_check(synch, thread) \</span>
<a name="l00151"></a>00151 <span class="preprocessor">        ((synch)-&gt;owner == thread ? 0 : -EPERM)</span>
<a name="l00152"></a>00152 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !CONFIG_XENO_FASTSYNCH */</span>
<a name="l00153"></a>00153 
<a name="l00154"></a>00154 <span class="preprocessor">#define xnsynch_fast_is_claimed(fastlock) \</span>
<a name="l00155"></a>00155 <span class="preprocessor">        xnhandle_test_spare(fastlock, XNSYNCH_FLCLAIM)</span>
<a name="l00156"></a>00156 <span class="preprocessor"></span><span class="preprocessor">#define xnsynch_fast_set_claimed(fastlock, enable) \</span>
<a name="l00157"></a>00157 <span class="preprocessor">        (((fastlock) &amp; ~XNSYNCH_FLCLAIM) | ((enable) ? XNSYNCH_FLCLAIM : 0))</span>
<a name="l00158"></a>00158 <span class="preprocessor"></span><span class="preprocessor">#define xnsynch_fast_mask_claimed(fastlock) ((fastlock) &amp; ~XNSYNCH_FLCLAIM)</span>
<a name="l00159"></a>00159 <span class="preprocessor"></span>
<a name="l00160"></a>00160 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00161"></a>00161 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
<a name="l00162"></a>00162 <span class="preprocessor">#endif</span>
<a name="l00163"></a>00163 <span class="preprocessor"></span>
<a name="l00164"></a>00164 <span class="preprocessor">#if XENO_DEBUG(SYNCH_RELAX)</span>
<a name="l00165"></a>00165 <span class="preprocessor"></span>
<a name="l00166"></a>00166 <span class="keywordtype">void</span> xnsynch_detect_relaxed_owner(<span class="keyword">struct</span> xnsynch *synch,
<a name="l00167"></a>00167                                   <span class="keyword">struct</span> xnthread *sleeper);
<a name="l00168"></a>00168 
<a name="l00169"></a>00169 <span class="keywordtype">void</span> xnsynch_detect_claimed_relax(<span class="keyword">struct</span> xnthread *owner);
<a name="l00170"></a>00170 
<a name="l00171"></a>00171 <span class="preprocessor">#else </span><span class="comment">/* !XENO_DEBUG(SYNCH_RELAX) */</span>
<a name="l00172"></a>00172 
<a name="l00173"></a>00173 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> xnsynch_detect_relaxed_owner(<span class="keyword">struct</span> xnsynch *synch,
<a name="l00174"></a>00174                                   <span class="keyword">struct</span> xnthread *sleeper)
<a name="l00175"></a>00175 {
<a name="l00176"></a>00176 }
<a name="l00177"></a>00177 
<a name="l00178"></a>00178 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> xnsynch_detect_claimed_relax(<span class="keyword">struct</span> xnthread *owner)
<a name="l00179"></a>00179 {
<a name="l00180"></a>00180 }
<a name="l00181"></a>00181 
<a name="l00182"></a>00182 <span class="preprocessor">#endif </span><span class="comment">/* !XENO_DEBUG(SYNCH_RELAX) */</span>
<a name="l00183"></a>00183 
<a name="l00184"></a>00184 <span class="keywordtype">void</span> <a class="code" href="group__synch.html#g4c07b8ec87b14cf18ef512f0e0aade51" title="Initialize a synchronization object.">xnsynch_init</a>(<span class="keyword">struct</span> xnsynch *synch, xnflags_t flags,
<a name="l00185"></a>00185                   xnarch_atomic_t *fastlock);
<a name="l00186"></a>00186 
<a name="l00187"></a>00187 <span class="preprocessor">#define xnsynch_destroy(synch)  xnsynch_flush(synch, XNRMID)</span>
<a name="l00188"></a>00188 <span class="preprocessor"></span>
<a name="l00189"></a>00189 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> xnsynch_set_owner(<span class="keyword">struct</span> xnsynch *synch,
<a name="l00190"></a>00190                                      <span class="keyword">struct</span> xnthread *thread)
<a name="l00191"></a>00191 {
<a name="l00192"></a>00192         synch-&gt;owner = thread;
<a name="l00193"></a>00193 }
<a name="l00194"></a>00194 
<a name="l00195"></a>00195 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> xnsynch_register_cleanup(<span class="keyword">struct</span> xnsynch *synch,
<a name="l00196"></a>00196                                             <span class="keywordtype">void</span> (*handler)(<span class="keyword">struct</span> xnsynch *))
<a name="l00197"></a>00197 {
<a name="l00198"></a>00198         synch-&gt;cleanup = handler;
<a name="l00199"></a>00199 }
<a name="l00200"></a>00200 
<a name="l00201"></a>00201 xnflags_t <a class="code" href="group__synch.html#g2747e9834546af461f118e7c90c9613e" title="Sleep on an ownerless synchronization object.">xnsynch_sleep_on</a>(<span class="keyword">struct</span> xnsynch *synch,
<a name="l00202"></a>00202                            xnticks_t timeout,
<a name="l00203"></a>00203                            xntmode_t timeout_mode);
<a name="l00204"></a>00204 
<a name="l00205"></a>00205 <span class="keyword">struct </span>xnthread *<a class="code" href="group__synch.html#gd5992ddbdb81821cb29bae8900eb65ac" title="Give the resource ownership to the next waiting thread.">xnsynch_wakeup_one_sleeper</a>(<span class="keyword">struct</span> xnsynch *synch);
<a name="l00206"></a>00206 
<a name="l00207"></a>00207 xnpholder_t *<a class="code" href="group__synch.html#g9e530d12df9881251231af489208762e" title="Give the resource ownership to a given waiting thread.">xnsynch_wakeup_this_sleeper</a>(<span class="keyword">struct</span> xnsynch *synch,
<a name="l00208"></a>00208                                          xnpholder_t *holder);
<a name="l00209"></a>00209 
<a name="l00210"></a>00210 xnflags_t <a class="code" href="group__synch.html#g6d4ad886901c751a4f3c51b90fc8f91f" title="Acquire the ownership of a synchronization object.">xnsynch_acquire</a>(<span class="keyword">struct</span> xnsynch *synch,
<a name="l00211"></a>00211                           xnticks_t timeout,
<a name="l00212"></a>00212                           xntmode_t timeout_mode);
<a name="l00213"></a>00213 
<a name="l00214"></a>00214 <span class="keyword">struct </span>xnthread *<a class="code" href="group__synch.html#g1208abb6b3d0017a4e0c43b9baff8cfb" title="Give the resource ownership to the next waiting thread.">xnsynch_release</a>(<span class="keyword">struct</span> xnsynch *synch);
<a name="l00215"></a>00215 
<a name="l00216"></a>00216 <span class="keyword">struct </span>xnthread *<a class="code" href="group__synch.html#ge02c775ea161a0c27b919d019d170bc2" title="Access the thread leading a synch object wait queue.">xnsynch_peek_pendq</a>(<span class="keyword">struct</span> xnsynch *synch);
<a name="l00217"></a>00217 
<a name="l00218"></a>00218 <span class="keywordtype">int</span> <a class="code" href="group__synch.html#g82beb68147bc5f0306ab02a61a9dc76b" title="Unblock all waiters pending on a resource.">xnsynch_flush</a>(<span class="keyword">struct</span> xnsynch *synch, xnflags_t reason);
<a name="l00219"></a>00219 
<a name="l00220"></a>00220 <span class="keywordtype">void</span> <a class="code" href="group__synch.html#g51146a2d5bd0ec6a10d2fcd685946938" title="Release all ownerships.">xnsynch_release_all_ownerships</a>(<span class="keyword">struct</span> xnthread *thread);
<a name="l00221"></a>00221 
<a name="l00222"></a>00222 <span class="keywordtype">void</span> <a class="code" href="group__synch.html#g49c975f160509b1aa04df4900614b2ce" title="Change a sleeper&amp;#39;s priority.">xnsynch_requeue_sleeper</a>(<span class="keyword">struct</span> xnthread *thread);
<a name="l00223"></a>00223 
<a name="l00224"></a>00224 <span class="keywordtype">void</span> <a class="code" href="group__synch.html#g997e546948920193bb36ab8d120fbab7" title="Abort a wait for a resource.">xnsynch_forget_sleeper</a>(<span class="keyword">struct</span> xnthread *thread);
<a name="l00225"></a>00225 
<a name="l00226"></a>00226 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00227"></a>00227 <span class="preprocessor"></span>}
<a name="l00228"></a>00228 <span class="preprocessor">#endif</span>
<a name="l00229"></a>00229 <span class="preprocessor"></span>
<a name="l00230"></a>00230 <span class="preprocessor">#endif </span><span class="comment">/* __KERNEL__ || __XENO_SIM__ */</span>
<a name="l00231"></a>00231 
<a name="l00232"></a>00232 <span class="preprocessor">#endif </span><span class="comment">/* !_XENO_NUCLEUS_SYNCH_H_ */</span>
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Mon Aug 2 12:48:36 2010 for Xenomai API by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
</body>
</html>