PatchworkOS
Loading...
Searching...
No Matches
mutex.h
Go to the documentation of this file.
1#pragma once
2
3#include <kernel/sched/wait.h>
4#include <kernel/sync/lock.h>
5
6#include <stdbool.h>
7
8typedef struct thread thread_t;
9
23#define MUTEX_SCOPE(mutex) \
24 __attribute__((cleanup(mutex_cleanup))) mutex_t* CONCAT(m, __COUNTER__) = (mutex); \
25 mutex_acquire((mutex))
26
32#define MUTEX_CREATE {.waitQueue = WAIT_QUEUE_CREATE, .owner = NULL, .depth = 0, .lock = LOCK_CREATE}
33
45
51void mutex_init(mutex_t* mtx);
52
58void mutex_deinit(mutex_t* mtx);
59
67void mutex_acquire(mutex_t* mtx);
68
78bool mutex_acquire_timeout(mutex_t* mtx, clock_t timeout);
79
87void mutex_release(mutex_t* mtx);
88
89static inline void mutex_cleanup(mutex_t** mtx)
90{
91 mutex_release(*mtx);
92}
93
bool mutex_acquire_timeout(mutex_t *mtx, clock_t timeout)
Acquires a mutex, blocking until it is available or the timeout is reached.
Definition mutex.c:33
void mutex_release(mutex_t *mtx)
Releases a mutex.
Definition mutex.c:103
void mutex_acquire(mutex_t *mtx)
Acquires a mutex, blocking until it is available.
Definition mutex.c:26
void mutex_deinit(mutex_t *mtx)
Deinitializes a mutex.
Definition mutex.c:20
static void mutex_cleanup(mutex_t **mtx)
Definition mutex.h:89
void mutex_init(mutex_t *mtx)
Initializes a mutex.
Definition mutex.c:12
__UINT64_TYPE__ clock_t
A nanosecond time.
Definition clock_t.h:13
__UINT32_TYPE__ uint32_t
Definition stdint.h:15
A simple ticket lock implementation.
Definition lock.h:43
Mutex structure.
Definition mutex.h:39
lock_t lock
Definition mutex.h:43
wait_queue_t waitQueue
Definition mutex.h:40
thread_t * owner
Definition mutex.h:41
uint32_t depth
Definition mutex.h:42
Thread of execution structure.
Definition thread.h:55
Wait queue structure.
Definition wait.h:166