rmutex.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2016 Theobroma Systems Design & Consulting GmbH
3  * SPDX-License-Identifier: LGPL-2.1-only
4  */
5 
6 #pragma once
7 
22 #include <stdint.h>
23 
24 #include "mutex.h"
25 #include "sched.h"
26 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30 
34 typedef struct rmutex_t {
35  /* fields are managed by mutex functions, don't touch */
42 
47  uint16_t refcount;
48 
58 
63 #define RMUTEX_INIT { MUTEX_INIT, 0, KERNEL_PID_UNDEF }
64 
71 static inline void rmutex_init(rmutex_t *rmutex)
72 {
73  rmutex_t empty_rmutex = RMUTEX_INIT;
74 
75  *rmutex = empty_rmutex;
76 }
77 
87 int rmutex_trylock(rmutex_t *rmutex);
88 
95 void rmutex_lock(rmutex_t *rmutex);
96 
102 void rmutex_unlock(rmutex_t *rmutex);
103 
104 #ifdef __cplusplus
105 }
106 #endif
107 
int16_t kernel_pid_t
Unique process identifier.
Definition: sched.h:135
struct rmutex_t rmutex_t
Mutex structure.
void rmutex_lock(rmutex_t *rmutex)
Locks a recursive mutex, blocking.
#define RMUTEX_INIT
Static initializer for rmutex_t.
Definition: rmutex.h:63
int rmutex_trylock(rmutex_t *rmutex)
Tries to get a recursive mutex, non-blocking.
static void rmutex_init(rmutex_t *rmutex)
Initializes a recursive mutex object.
Definition: rmutex.h:71
void rmutex_unlock(rmutex_t *rmutex)
Unlocks the recursive mutex.
Mutex for thread synchronization.
Scheduler API definition.
Mutex structure.
Definition: mutex.h:36
Mutex structure.
Definition: rmutex.h:34
uint16_t refcount
Number of locks owned by the thread owner.
Definition: rmutex.h:47
kernel_pid_t owner
Owner thread of the mutex.
Definition: rmutex.h:56
mutex_t mutex
The mutex used for locking.
Definition: rmutex.h:41