L4Re Operating System Framework
Interface and Usage Documentation
•All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
lock.h
Go to the documentation of this file.
1/*****************************************************************************/
9/*
10 * (c) 2000-2009 Author(s)
11 * economic rights: Technische Universität Dresden (Germany)
12 * License: see LICENSE.spdx (in this directory or the directories above)
13 */
14
15/*****************************************************************************/
16#ifndef __L4UTIL_LOCK_H__
17#define __L4UTIL_LOCK_H__
18
19#include <l4/sys/thread.h>
20#include <l4/sys/compiler.h>
21#include <l4/util/atomic.h>
22
24
25typedef l4_uint32_t l4util_simple_lock_t;
26
27L4_INLINE int l4_simple_try_lock(l4util_simple_lock_t *lock);
28L4_INLINE void l4_simple_unlock(l4util_simple_lock_t *lock);
29L4_INLINE int l4_simple_lock_locked(l4util_simple_lock_t *lock);
30L4_INLINE void l4_simple_lock_solid(register l4util_simple_lock_t *p);
31L4_INLINE void l4_simple_lock(l4util_simple_lock_t * lock);
32
33L4_INLINE int
34l4_simple_try_lock(l4util_simple_lock_t *lock)
35{
36 return l4util_xchg32(lock, 1) == 0;
37}
38
39L4_INLINE void
40l4_simple_unlock(l4util_simple_lock_t *lock)
41{
42 *lock = 0;
43}
44
45L4_INLINE int
46l4_simple_lock_locked(l4util_simple_lock_t *lock)
47{
48 return (*lock == 0) ? 0 : 1;
49}
50
51L4_INLINE void
52l4_simple_lock_solid(register l4util_simple_lock_t *p)
53{
54 while (l4_simple_lock_locked(p) || !l4_simple_try_lock(p))
56}
57
58L4_INLINE void
59l4_simple_lock(l4util_simple_lock_t * lock)
60{
61 if (!l4_simple_try_lock(lock))
62 l4_simple_lock_solid(lock);
63}
64
66
67#endif
L4 compiler related defines.
unsigned int l4_uint32_t
Unsigned 32bit value.
Definition l4int.h:29
@ L4_INVALID_CAP
Invalid capability selector.
Definition consts.h:157
l4_msgtag_t l4_thread_switch(l4_cap_idx_t to_thread) L4_NOTHROW
Switch to another thread (and donate the remaining time slice).
Definition thread.h:973
#define __END_DECLS
End section with C types and functions.
Definition compiler.h:167
#define L4_INLINE
L4 Inline function attribute.
Definition compiler.h:51
#define __BEGIN_DECLS
Start section with C types and functions.
Definition compiler.h:164
l4_uint32_t l4util_xchg32(volatile l4_uint32_t *dest, l4_uint32_t val)
Atomic exchange (32 bit version)
Definition atomic.h:387
atomic operations header and generic implementations