pthread_rwlock_init(3c) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

pthread_rwlock_init(3c)

pthread_rwlock_init(3C)  Standard C Library Functions  pthread_rwlock_init(3C)

NAME
       pthread_rwlock_init,  pthread_rwlock_destroy  -  initialize  or destroy
       read-write lock object

SYNOPSIS
       #include <pthread.h>

       int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock,
            const pthread_rwlockattr_t *restrict attr);


       int pthread_rwlock_destroy(pthread_rwlock_t **rwlock);


       pthread_rwlock_t rwlock=PTHREAD_RWLOCK_INITIALIZER;

DESCRIPTION
       The pthread_rwlock_init() function initializes the read-write lock ref‐
       erenced by rwlock with the attributes referenced by attr.  If  attr  is
       NULL,  the  default  read-write lock attributes are used; the effect is
       the same as passing the address of a default read-write lock attributes
       object. Once initialized, the lock can be  used  any  number  of  times
       without being re-initialized. Upon successful initialization, the state
       of  the  read-write  lock becomes initialized and unlocked. Results are
       undefined if pthread_rwlock_init() is called specifying an already ini‐
       tialized read-write lock. Results are undefined if a read-write lock is
       used without first being initialized.


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


       The  pthread_rwlock_destroy() function destroys the read-write lock ob‐
       ject referenced by rwlock and releases any resources used by the  lock.
       The effect of subsequent use of the lock is undefined until the lock is
       re-initialized by another call to pthread_rwlock_init(). An implementa‐
       tion may cause pthread_rwlock_destroy() to set the object referenced by
       rwlock to an invalid value. Results are undefined if pthread_rwlock_de‐
       stroy()  is  called when any thread holds rwlock. Attempting to destroy
       an uninitialized read-write lock results in undefined behaviour. A  de‐
       stroyed   read-write   lock   object   can   be   re-initialized  using
       pthread_rwlock_init(); the results of otherwise referencing  the  read-
       write lock object after it has been destroyed are undefined.


       In  cases where default read-write lock attributes are appropriate, the
       macro PTHREAD_RWLOCK_INITIALIZER can be used to  initialize  read-write
       locks  that  are  statically allocated. The effect is equivalent to dy‐
       namic initialization by a call to pthread_rwlock_init() with the  para‐
       meter  attr  specified  as  NULL,  except that no error checks are per‐
       formed.

RETURN VALUES
       If successful, the pthread_rwlock_init()  and  pthread_rwlock_destroy()
       functions  return 0. Otherwise, an error number is returned to indicate
       the error.

ERRORS
       The pthread_rwlock_init() and pthread_rwlock_destroy()  functions  will
       fail if:

       EINVAL    The value specified by attr is invalid.


       EINVAL    The value specified by rwlock is invalid.


       ENOMEM    Insufficient memory exists to initialize the rwlock. This er‐
                 ror code applies only to scalable rwlocks which require extra
                 memory allocation during initialization.


EXAMPLES
       Example 1 Scalable rwlock



       The following example illustrates creation and destruction of the scal‐
       able read-write lock.



         #include <pthread.h>
         int
         main(int argc, char *argv[])
         {
                   int                     error;
                   pthread_rwlock_t        rwlock;
                         pthread_rwlockattr_t rwlattr;

                         error = pthread_rwlockattr_init(&rwlattr);
                   if (error != 0)
                                 return (1);

                         error = pthread_rwlockattr_settype_np(&rwlattr,
                             PTHREAD_RWLOCK_SCALABLE_NP);
                         if (error != 0)
                                 return (2);

                   error = pthread_rwlock_init(&rwlock, &rwlattr);
                   if (error != 0)
                        return (3);

                        error = pthread_rwlock_destroy(&rwlock);
                         if (error != 0)
                                 return (4);

                        error = pthread_rwlockattr_destroy(&rwlattr);
                         if (error != 0)
                                 return (5);
                         return (0);
                  }




       The  scalable  rwlock  pthread_rwlock_init() function must be called to
       initialize the lock. Static initialization cannot be done for  a  scal‐
       able rwlock as it requires extra memory allocation. Also, after the ap‐
       plication  is  done  using the scalable rwlock object, it must call the
       pthread_rwlock_destroy() function to  deallocate  memory  used  by  the
       rwlock object to prevent memory leaks.

ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:

       tab()  box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE TYPEAT‐
       TRIBUTE VALUE _ Interface StabilityCommitted _ MT-LevelMT-Safe _  Stan‐
       dardSee standards(7).


SEE ALSO
       pthread_rwlock_rdlock(3C),                   pthread_rwlock_unlock(3C),
       pthread_rwlock_wrlock(3C), pthread_rwlockattr_init(3C), pthread_rwlock‐
       attr_getpshared(3C), attributes(7), standards(7)

Oracle Solaris 11.4               07 Oct 2016          pthread_rwlock_init(3C)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3