Provided by: manpages-posix-dev_2.16-1_all bug

NAME

       pthread_spin_destroy,  pthread_spin_init  -  destroy  or  initialize  a  spin  lock object
       (ADVANCED REALTIME THREADS)

SYNOPSIS

       #include <pthread.h>

       int pthread_spin_destroy(pthread_spinlock_t *lock);
       int pthread_spin_init(pthread_spinlock_t *lock, int pshared);

DESCRIPTION

       The pthread_spin_destroy() function shall destroy the spin lock  referenced  by  lock  and
       release  any  resources  used  by  the  lock.  The effect of subsequent use of the lock is
       undefined until the lock is reinitialized by  another  call  to  pthread_spin_init().  The
       results are undefined if pthread_spin_destroy() is called when a thread holds the lock, or
       if this function is called with an uninitialized thread spin lock.

       The pthread_spin_init() function shall allocate any resources required  to  use  the  spin
       lock referenced by lock and initialize the lock to an unlocked state.

       If  the Thread Process-Shared Synchronization option is supported and the value of pshared
       is PTHREAD_PROCESS_SHARED, the implementation shall permit the spin lock  to  be  operated
       upon by any thread that has access to the memory where the spin lock is allocated, even if
       it is allocated in memory that is shared by multiple processes.

       If the Thread Process-Shared Synchronization option is supported and the value of  pshared
       is PTHREAD_PROCESS_PRIVATE, or if the option is not supported, the spin lock shall only be
       operated upon by threads created within the same process as the  thread  that  initialized
       the  spin  lock. If threads of differing processes attempt to operate on such a spin lock,
       the behavior is undefined.

       The  results  are  undefined  if  pthread_spin_init()  is  called  specifying  an  already
       initialized  spin  lock.  The  results  are undefined if a spin lock is used without first
       being initialized.

       If the pthread_spin_init() function fails, the lock is not initialized and the contents of
       lock are undefined.

       Only the object referenced by lock may be used for performing synchronization.

       The  result  of  referring  to  copies  of that object in calls to pthread_spin_destroy(),
       pthread_spin_lock(), pthread_spin_trylock(), or pthread_spin_unlock() is undefined.

RETURN VALUE

       Upon successful completion, these functions shall return zero; otherwise, an error  number
       shall be returned to indicate the error.

ERRORS

       These functions may fail if:

       EBUSY  The  implementation  has  detected  an attempt to initialize or destroy a spin lock
              while it is in use (for example, while being used in a pthread_spin_lock() call) by
              another thread.

       EINVAL The value specified by lock is invalid.

       The pthread_spin_init() function shall fail if:

       EAGAIN The system lacks the necessary resources to initialize another spin lock.

       ENOMEM Insufficient memory exists to initialize the lock.

       These functions shall not return an error code of [EINTR].

       The following sections are informative.

EXAMPLES

       None.

APPLICATION USAGE

       The  pthread_spin_destroy()  and  pthread_spin_init() functions are part of the Spin Locks
       option and need not be provided on all implementations.

RATIONALE

       None.

FUTURE DIRECTIONS

       None.

SEE ALSO

       pthread_spin_lock()  ,  pthread_spin_unlock()   ,   the   Base   Definitions   volume   of
       IEEE Std 1003.1-2001, <pthread.h>

COPYRIGHT

       Portions  of  this  text  are  reprinted  and  reproduced in electronic form from IEEE Std
       1003.1, 2003 Edition, Standard for Information Technology  --  Portable  Operating  System
       Interface  (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2003 by
       the Institute of Electrical and Electronics Engineers, Inc and  The  Open  Group.  In  the
       event  of  any  discrepancy  between this version and the original IEEE and The Open Group
       Standard, the original IEEE and The Open Group  Standard  is  the  referee  document.  The
       original Standard can be obtained online at http://www.opengroup.org/unix/online.html .