Add initializers

This commit is contained in:
2026-10-23 00:35:11 +02:00
parent b83f1fe6d9
commit 92787ddd75
4 changed files with 12 additions and 0 deletions
+2
View File
@@ -6,6 +6,8 @@
typedef _Atomic(uintptr_t) mutex_t;
void mutex_init(mutex_t* mutex);
void mutex_lock(mutex_t* mutex);
bool mutex_trylock(mutex_t* mutex);
+2
View File
@@ -8,6 +8,8 @@ struct rwlock {
atomic_uintptr_t word;
};
void rwlock_init(struct rwlock* rw);
void rwlock_read_lock(struct rwlock* rw);
void rwlock_read_unlock(struct rwlock* rw);
bool rwlock_try_read_lock(struct rwlock* rw);
+4
View File
@@ -32,6 +32,10 @@ static inline bool owner_is_running(uintptr_t owner) {
return atomic_load(&((struct task*)owner)->on_cpu, ATOMIC_RELAXED);
}
void mutex_init(mutex_t* mutex) {
atomic_store(mutex, 0, ATOMIC_RELAXED);
}
bool mutex_trylock(mutex_t* mutex) {
uintptr_t self = self_token();
uintptr_t word = atomic_load(mutex, ATOMIC_RELAXED);
+4
View File
@@ -41,6 +41,10 @@ static inline uint8_t priority_of(struct task* task) {
return atomic_load(&task->priority, ATOMIC_RELAXED);
}
void rwlock_init(struct rwlock* rw) {
atomic_store(&rw->word, 0, ATOMIC_RELAXED);
}
bool rwlock_try_read_lock(struct rwlock* rw) {
uintptr_t word = atomic_load(&rw->word, ATOMIC_RELAXED);
while (!(word & (RW_WRITE_LOCK | RW_WRITE_WANT))) {