PatchworkOS
Loading...
Searching...
No Matches
rwlock.h
Go to the documentation of this file.
1#pragma once
2
4
5#include <stdatomic.h>
6
7typedef struct thread thread_t;
8
20#define RWLOCK_DEADLOCK_TIMEOUT (CLOCKS_PER_SEC * 10)
21
27#define RWLOCK_READ_SCOPE(lock) \
28 __attribute__((cleanup(rwlock_read_cleanup))) rwlock_t* CONCAT(rl, __COUNTER__) = (lock); \
29 rwlock_read_acquire((lock))
30
36#define RWLOCK_WRITE_SCOPE(lock) \
37 __attribute__((cleanup(rwlock_write_cleanup))) rwlock_t* CONCAT(wl, __COUNTER__) = (lock); \
38 rwlock_write_acquire((lock))
39
45#define RWLOCK_CREATE \
46 (rwlock_t) \
47 { \
48 .readTicket = ATOMIC_VAR_INIT(0), .readServe = ATOMIC_VAR_INIT(0), .writeTicket = ATOMIC_VAR_INIT(0), \
49 .writeServe = ATOMIC_VAR_INIT(0), .activeReaders = ATOMIC_VAR_INIT(0), .activeWriter = ATOMIC_VAR_INIT(false) \
50 }
51
58typedef struct
59{
60 atomic_uint_fast16_t readTicket;
61 atomic_uint_fast16_t readServe;
62 atomic_uint_fast16_t writeTicket;
63 atomic_uint_fast16_t writeServe;
64 atomic_uint_fast16_t activeReaders;
65 atomic_bool activeWriter;
66} rwlock_t;
67
74
81
88
95
102
103static inline void rwlock_read_cleanup(rwlock_t** lock)
104{
106}
107
108static inline void rwlock_write_cleanup(rwlock_t** lock)
109{
111}
112
void rwlock_write_acquire(rwlock_t *lock)
Acquires a rwlock for writing, blocking until it is available.
Definition rwlock.c:65
static void rwlock_write_cleanup(rwlock_t **lock)
Definition rwlock.h:108
void rwlock_read_acquire(rwlock_t *lock)
Acquires a rwlock for reading, blocking until it is available.
Definition rwlock.c:18
void rwlock_read_release(rwlock_t *lock)
Releases a rwlock from reading.
Definition rwlock.c:57
void rwlock_write_release(rwlock_t *lock)
Releases a rwlock from writing.
Definition rwlock.c:116
static void rwlock_read_cleanup(rwlock_t **lock)
Definition rwlock.h:103
void rwlock_init(rwlock_t *lock)
Initializes a rwlock.
Definition rwlock.c:8
static rwlock_t lock
Definition irq.c:10
Read-Write Ticket Lock structure.
Definition rwlock.h:59
atomic_uint_fast16_t readTicket
Definition rwlock.h:60
atomic_uint_fast16_t writeServe
Definition rwlock.h:63
atomic_uint_fast16_t readServe
Definition rwlock.h:61
atomic_uint_fast16_t activeReaders
Definition rwlock.h:64
atomic_uint_fast16_t writeTicket
Definition rwlock.h:62
atomic_bool activeWriter
Definition rwlock.h:65
Thread of execution structure.
Definition thread.h:55