123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #pragma once
- #include <common/atomic.h>
- #include <common/spinlock.h>
- #include <common/glib.h>
- #include <process/process.h>
- typedef struct
- {
- atomic_t count;
- spinlock_t wait_lock;
- struct List wait_list;
- } mutex_t;
- struct mutex_waiter_t
- {
- struct List list;
- struct process_control_block *pcb;
- };
- void mutex_init(mutex_t *lock);
- void mutex_lock(mutex_t *lock);
- void mutex_unlock(mutex_t *lock);
- int mutex_trylock(mutex_t *lock);
- #define mutex_is_locked(lock) ((atomic_read(&(lock)->count) == 1) ? 0 : 1)
|