PatchworkOS
Loading...
Searching...
No Matches
rwmutex.h
Go to the documentation of this file.
1#pragma once
2
3#include <kernel/sched/wait.h>
4#include <stdint.h>
5
6typedef struct rwmutex rwmutex_t;
7
21#define RWMUTEX_READ_SCOPE(mutex) \
22 __attribute__((cleanup(rwmutex_read_cleanup))) rwmutex_t* CONCAT(rm, __COUNTER__) = (mutex); \
23 rwmutex_read_acquire((mutex))
24
30#define RWMUTEX_WRITE_SCOPE(mutex) \
31 __attribute__((cleanup(rwmutex_write_cleanup))) rwmutex_t* CONCAT(wm, __COUNTER__) = (mutex); \
32 rwmutex_write_acquire((mutex))
33
50
56void rwmutex_init(rwmutex_t* mtx);
57
63void rwmutex_deinit(rwmutex_t* mtx);
64
71
84
91
98
108
115
117{
119}
120
122{
124}
125
void rwmutex_write_acquire(rwmutex_t *mtx)
Acquires a rwmutex for writing, blocking until it is available.
Definition rwmutex.c:85
void rwmutex_init(rwmutex_t *mtx)
Initializes a rwmutex.
Definition rwmutex.c:10
uint64_t rwmutex_write_try_acquire(rwmutex_t *mtx)
Tries to acquire a rwmutex for writing.
Definition rwmutex.c:104
void rwmutex_read_acquire(rwmutex_t *mtx)
Acquires a rwmutex for reading, blocking until it is available.
Definition rwmutex.c:30
uint64_t rwmutex_read_try_acquire(rwmutex_t *mtx)
Tries to acquire a rwmutex for reading.
Definition rwmutex.c:47
static void rwmutex_read_cleanup(rwmutex_t **mutex)
Definition rwmutex.h:116
void rwmutex_read_release(rwmutex_t *mtx)
Releases a rwmutex from reading.
Definition rwmutex.c:67
static void rwmutex_write_cleanup(rwmutex_t **mutex)
Definition rwmutex.h:121
void rwmutex_deinit(rwmutex_t *mtx)
Deinitializes a rwmutex.
Definition rwmutex.c:20
void rwmutex_write_release(rwmutex_t *mtx)
Releases a rwmutex from writing.
Definition rwmutex.c:124
static mtx_t mutex
Definition heap.c:35
__UINT64_TYPE__ uint64_t
Definition stdint.h:17
__UINT16_TYPE__ uint16_t
Definition stdint.h:13
A simple ticket lock implementation.
Definition lock.h:43
Read-Write Mutex structure.
Definition rwmutex.h:42
wait_queue_t writerQueue
Definition rwmutex.h:46
bool hasWriter
Definition rwmutex.h:47
wait_queue_t readerQueue
Definition rwmutex.h:45
uint16_t waitingWriters
Definition rwmutex.h:44
uint16_t activeReaders
Definition rwmutex.h:43
lock_t lock
Definition rwmutex.h:48
Wait queue structure.
Definition wait.h:166