mutex

Mutex and Condition Variable

Constants

FUTEX_WAIT = 0
FUTEX_WAKE = 1

Functions

FunctionDescription
_mtx_futex_waitInternal: futex syscall wrapper.
_mtx_futex_wake
mutex_newCreate new mutex (unlocked).
mutex_lockLock mutex. Blocks if already locked.
mutex_unlockUnlock mutex.
mutex_trylockNon-blocking try-lock. Returns 1 if acquired, 0 if not.
condvar_newCreate condition variable.
condvar_waitWait on condition variable. Must hold mutex m. Releases mutex, waits, re-acqu…
condvar_signalWake one waiter.
condvar_broadcastWake all waiters.
spinlock_newCreate simple spinlock.
spinlock_lockSpinlock: busy-wait until acquired.
spinlock_unlockSpinlock: release.

Details

_mtx_futex_wait

fn _mtx_futex_wait(addr: &i64, expected: i64) -> i64

Internal: futex syscall wrapper.

_mtx_futex_wake

fn _mtx_futex_wake(addr: &i64, count: i64) -> i64

mutex_new

fn mutex_new() -> &i64

Create new mutex (unlocked).

mutex_lock

fn mutex_lock(m: &i64)

Lock mutex. Blocks if already locked.

mutex_unlock

fn mutex_unlock(m: &i64)

Unlock mutex.

mutex_trylock

fn mutex_trylock(m: &i64) -> i64

Non-blocking try-lock. Returns 1 if acquired, 0 if not.

condvar_new

fn condvar_new() -> &i64

Create condition variable.

condvar_wait

fn condvar_wait(cv: &i64, m: &i64)

Wait on condition variable. Must hold mutex m. Releases mutex, waits, re-acquires mutex on return.

condvar_signal

fn condvar_signal(cv: &i64)

Wake one waiter.

condvar_broadcast

fn condvar_broadcast(cv: &i64)

Wake all waiters.

spinlock_new

fn spinlock_new() -> &i64

Create simple spinlock.

spinlock_lock

fn spinlock_lock(sl: &i64)

Spinlock: busy-wait until acquired.

spinlock_unlock

fn spinlock_unlock(sl: &i64)

Spinlock: release.