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

개요

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

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
       object  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
       implementation may cause pthread_rwlock_destroy()  to  set  the  object
       referenced  by  rwlock  to  an  invalid value. Results are undefined if
       pthread_rwlock_destroy()  is  called  when  any  thread  holds  rwlock.
       Attempting to destroy an uninitialized read-write lock results in unde‐
       fined behaviour. A destroyed read-write lock object can be  re-initial‐
       ized  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
       dynamic  initialization  by  a  call  to pthread_rwlock_init() with the
       parameter 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
                 error  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
       scalable 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
       application 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