spinlock_deprecated(3) BSD Library Functions Manual spinlock_deprecated(3)
NAME
OSSpinLockTry, OSSpinLockLock, OSSpinLockUnlock -- deprecated atomic spin
lock synchronization primitives
SYNOPSIS
#include <libkern/OSAtomic.h>
bool
OSSpinLockTry(OSSpinLock *lock);
void
OSSpinLockLock(OSSpinLock *lock);
void
OSSpinLockUnlock(OSSpinLock *lock);
DESCRIPTION
These are deprecated interfaces for userspace spinlocks, provided for
compatibility with legacy code. These interfaces should no longer be
used, particularily in situations where threads of differing priorities
may contend on the same spinlock.
The interfaces in <os/lock.h> should be used instead in cases where a
very low-level lock primitive is required. In general however, using
higher level synchronization primitives such as those provided by the
pthread or dispatch subsystems are preferred.
The OSSpinLock operations use memory barriers to synchronize access to
shared memory protected by the lock. Preemption is possible while the
lock is held.
OSSpinLock is an integer type. The convention is that unlocked is zero,
and locked is nonzero. Locks must be naturally aligned and cannot be in
cache-inhibited memory.
OSSpinLockLock() will spin if the lock is already held, but employs vari-
ous strategies to back off. Because it can spin, it will generally be
less cpu and power efficient than other synchronization primitives.
OSSpinLockTry() immediately returns false if the lock was held, true if
it took the lock. It does not spin.
OSSpinLockUnlock() unconditionally unlocks the lock by zeroing it.
RETURN VALUES
OSSpinLockTry() returns true if it took the lock, false if the lock was
already held.
SEE ALSO
atomic(3), atomic_deprecated(3)
Darwin May 26, 2004 Darwin
Mac OS X 10.12.3 - Generated Wed Feb 8 16:43:03 CST 2017
