# pthread_spin_destroy

## PROLOG



           This manual page is part of the POSIX Programmer's Manual.  The
           Linux implementation of this interface may differ (consult the
           corresponding Linux manual page for details of Linux behavior), or
           the interface may not be implemented on Linux.
    


## NAME



           pthread_spin_destroy, pthread_spin_init — destroy or initialize a
           spin lock object
    


## 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.
    
           See _Section 2.9.9_ , _Synchronization Object Copies and Alternative_
           _Mappings_ for further requirements.
    
           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



           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



           None.
    


## RATIONALE



           If an implementation detects that the value specified by the _lock_
           argument to _pthread_spin_destroy_() does not refer to an
           initialized spin lock object, it is recommended that the function
           should fail and report an **[EINVAL]** error.
    
           If an implementation detects that the value specified by the _lock_
           argument to _pthread_spin_destroy_() or _pthread_spin_init_() refers
           to a locked spin lock object, or detects that the value specified
           by the _lock_ argument to _pthread_spin_init_() refers to an already
           initialized spin lock object, it is recommended that the function
           should fail and report an **[EBUSY]** error.
    


## FUTURE DIRECTIONS



           None.
    


* * *