Add initializers
This commit is contained in:
@@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
typedef _Atomic(uintptr_t) mutex_t;
|
typedef _Atomic(uintptr_t) mutex_t;
|
||||||
|
|
||||||
|
void mutex_init(mutex_t* mutex);
|
||||||
|
|
||||||
void mutex_lock(mutex_t* mutex);
|
void mutex_lock(mutex_t* mutex);
|
||||||
|
|
||||||
bool mutex_trylock(mutex_t* mutex);
|
bool mutex_trylock(mutex_t* mutex);
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ struct rwlock {
|
|||||||
atomic_uintptr_t word;
|
atomic_uintptr_t word;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void rwlock_init(struct rwlock* rw);
|
||||||
|
|
||||||
void rwlock_read_lock(struct rwlock* rw);
|
void rwlock_read_lock(struct rwlock* rw);
|
||||||
void rwlock_read_unlock(struct rwlock* rw);
|
void rwlock_read_unlock(struct rwlock* rw);
|
||||||
bool rwlock_try_read_lock(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);
|
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) {
|
bool mutex_trylock(mutex_t* mutex) {
|
||||||
uintptr_t self = self_token();
|
uintptr_t self = self_token();
|
||||||
uintptr_t word = atomic_load(mutex, ATOMIC_RELAXED);
|
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);
|
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) {
|
bool rwlock_try_read_lock(struct rwlock* rw) {
|
||||||
uintptr_t word = atomic_load(&rw->word, ATOMIC_RELAXED);
|
uintptr_t word = atomic_load(&rw->word, ATOMIC_RELAXED);
|
||||||
while (!(word & (RW_WRITE_LOCK | RW_WRITE_WANT))) {
|
while (!(word & (RW_WRITE_LOCK | RW_WRITE_WANT))) {
|
||||||
|
|||||||
Reference in New Issue
Block a user