| PTHREAD_SPIN(3) | Library Functions Manual | PTHREAD_SPIN(3) | 
pthread_spin, pthread_spin_init,
  pthread_spin_destroy,
  pthread_spin_lock,
  pthread_spin_trylock,
  pthread_spin_unlock —
#include <pthread.h>
int
  
  pthread_spin_init(pthread_spinlock_t
    *lock, int
    pshared);
int
  
  pthread_spin_destroy(pthread_spinlock_t
    *lock);
int
  
  pthread_spin_lock(pthread_spinlock_t
    *lock);
int
  
  pthread_spin_trylock(pthread_spinlock_t
    *lock);
int
  
  pthread_spin_unlock(pthread_spinlock_t
    *lock);
pthread_spin_init() function is used to initialize a
  spin lock. In the NetBSD implementation the
  pshared parameter is currently unused and all spin locks
  exhibit the PTHREAD_PROCESS_SHARED property, implying
  that all spin locks may be accessed by threads of multiple processes. The
  results of calling pthread_spin_init() with an already
  initialized lock are undefined.
The pthread_spin_destroy() function is
    used to destroy a spin lock previously created with
    pthread_spin_init(). It is undefined what happens if
    the function is called when a thread holds the lock, or if the function is
    called with an uninitialized spin lock.
The pthread_spin_lock() function acquires
    a spin lock on lock, provided that
    lock is not presently held. If the lock cannot be
    immediately acquired, the calling thread repeatedly retries until it can
    acquire the lock. Undefined behavior may follow if the calling thread holds
    the lock at the time the call is made.
The pthread_spin_trylock() function
    performs the same locking action, but does not block if the lock cannot be
    immediately obtained; if the lock is held, the call fails.
The pthread_spin_unlock() function is used
    to release the read/write lock previously obtained by
    pthread_spin_lock() or
    pthread_spin_trylock(). The results are undefined if
    the lock is not held by the calling thread.
pthread_spin_init() function shall fail if:
ENOMEM]The pthread_spin_init() function may fail
    if:
EINVAL]NULL
      or the pshared parameter was neither
      PTHREAD_PROCESS_SHARED nor
      PTHREAD_PROCESS_PRIVATE.The pthread_spin_destroy() function may
    fail if:
EBUSY]EINVAL]The pthread_spin_trylock() function shall
    fail if:
EBUSY]The pthread_spin_lock() function may fail
    if:
EDEADLK]The pthread_spin_lock() and
    pthread_spin_trylock() functions may fail if:
EINVAL]The pthread_spin_unlock() function may
    fail if:
EINVAL]SCHED_FIFO), (SCHED_RR)
  should not use these interfaces. Outside carefully controlled environments,
  priority inversion with spin locks can lead to system deadlock. Mutexes are
  preferable in nearly every possible use case.
| July 8, 2010 | NetBSD 10.0 |