Add initializers
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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))) {
|
||||
|
||||
Reference in New Issue
Block a user