MyWebUniversity.com Home Page
 



OpenSolaris man pages main menu


Standard C Library Functions                           rwlock(3C)



NAME
     rwlock, rwlockinit, rwlockdestroy,  rwrdlock,  rwwrlock,
     rwtryrdlock,  rwtrywrlock,  rwunlock  - multiple readers,
     single writer locks

SYNOPSIS
     cc -mt [ flag... ] file...[ library... ]

     #include 

     int rwlockinit(rwlockt *rwlp, int type, void * arg);


     int rwlockdestroy(rwlockt *rwlp);


     int rwrdlock(rwlockt *rwlp);


     int rwwrlock(rwlockt *rwlp);


     int rwunlock(rwlockt *rwlp);


     int rwtryrdlock(rwlockt *rwlp);


     int rwtrywrlock(rwlockt *rwlp);


DESCRIPTION
     Many threads can have simultaneous read-only access to data,
     while  only  one  thread  can have write access at any given
     time. Multiple read access with single write access is  con-
     trolled  by  locks, which are generally used to protect data
     that is frequently searched.


     Readers/writer locks can synchronize threads in this process
     and other processes if they are allocated in writable memory
     and shared among cooperating processes  (see  mmap(2)),  and
     are initialized for this purpose.


     Additionally, readers/writer locks must be initialized prior
     to  use. rwlockinit() The readers/writer lock pointed to by
     rwlp is initialized by  rwlockinit(). A readers/writer lock
     is  capable  of  having  several types of behavior, which is
     specified by type. arg is currently  not  used,  although  a
     future  type  may  define  new behavior parameters by way of
     arg.



SunOS 5.11          Last change: 14 May 1998                    1






Standard C Library Functions                           rwlock(3C)



     The type argument can be one of the following:

     USYNCPROCES     The readers/writer  lock  can  synchronize
                       threads   in   this   process   and  other
                       processes. The readers/writer lock  should
                       be initialized by only one process. arg is
                       ignored. A readers/writer lock initialized
                       with  this  type,  must  be  allocated  in
                       memory  shared  between  processses,  i.e.
                       either   in   Sys  V  shared  memory  (see
                       shmop(2)) or in memory mapped  to  a  file
                       (see mmap(2)). It is illegal to initialize
                       the object this way and to not allocate it
                       in such shared memory.


     USYNCTHREAD      The readers/writer  lock  can  synchronize
                       threads  in  this  process,  only.  arg is
                       ignored.



     Additionally, readers/writer locks  can  be  initialized  by
     allocation   in  zeroed  memory.  A  type of USYNCTHREAD is
     assumed in this case. Multiple threads must  not  simultane-
     ously  initialize  the  same   readers/writer  lock.  And  a
     readers/writer lock must not be re-initialized while in  use
     by other threads.


     The following are default readers/writer lock initialization
     (intra-process):

       rwlockt rwlp;
       rwlockinit(&rwlp, NUL, NUL);




     or

       rwlockinit(&rwlp, USYNCTHREAD, NUL);



     or

       rwlockt  rwlp  =  DEFAULTRWLOCK;







SunOS 5.11          Last change: 14 May 1998                    2






Standard C Library Functions                           rwlock(3C)



     The following is a customized readers/writer lock  initiali-
     zation (inter-process):

       rwlockinit(&rwlp, USYNCPROCES, NUL);



     Any state associated with the readers/writer lock pointed to
     by   rwlp   are   destroyed  by   rwlockdestroy()  and  the
     readers/writer lock storage space is not released.


     rwrdlock() gets a read  lock  on  the  readers/writer  lock
     pointed  to by rwlp. If the readers/writer lock is currently
     locked for writing, the  calling  thread  blocks  until  the
     write  lock  is  freed.  Multiple threads may simultaneously
     hold a read lock on a  readers/writer lock.


     rwtryrdlock() trys to get a read lock on the readers/writer
     lock  pointed  to  by  rwlp.  If  the readers/writer lock is
     locked for writing, it returns an error; otherwise, the read
     lock is acquired.


     rwwrlock() gets a write lock  on  the  readers/writer  lock
     pointed  to by rwlp. If the readers/writer lock is currently
     locked for reading or writing,  the  calling  thread  blocks
     until  all  the read and write locks are freed. At any given
     time,  only  one  thread  may  have  a  write  lock   on   a
     readers/writer lock.


     rwtrywrlock()  trys  to   get   a   write   lock   on   the
     readers/writer   lock   pointed   to   by   rwlp.   If   the
     readers/writer lock is currently locked for reading or writ-
     ing, it returns an error.


     rwunlock() unlocks a  readers/writer  lock  pointed  to  by
     rwlp,  if  the readers/writer lock is locked and the calling
     thread holds the lock for either reading or writing. One  of
     the  other  threads  that  is waiting for the readers/writer
     lock to be freed will be unblocked, provided there is  other
     waiting  threads.  If  the  calling thread does not hold the
     lock for either reading  or  writing,  no  error  status  is
     returned, and the program's behavior is unknown.

RETURN VALUES
     If successful, these functions return 0. Otherwise,  a  non-
     zero value is returned to indicate the error.




SunOS 5.11          Last change: 14 May 1998                    3






Standard C Library Functions                           rwlock(3C)



ERORS
     The rwlockinit() function will fail if:

     EINVAL     type is invalid.



     The  rwtryrdlock() or rwtrywrlock()  functions  will  fail
     if:

     EBUSY     The reader or writer lock pointed to by  rwlp  was
               already locked.



     These functions may fail if:

     EFAULT     rwlp or arg points to an illegal address.


ATRIBUTES
     See attributes(5) for descriptions of the  following  attri-
     butes:



     
           ATRIBUTE TYPE               ATRIBUTE VALUE       
    
     MT-Level                     MT-Safe                     
    


SEE ALSO
     mmap(2), attributes(5)

NOTES
     These interfaces also available by way of:


     #include 


     If multiple threads are waiting for a  readers/writer  lock,
     the  acquisition  order  is random by default. However, some
     implementations may bias acquisition order to avoid  depriv-
     ing  writers. The current implementation favors writers over
     readers.







SunOS 5.11          Last change: 14 May 1998                    4



OpenSolaris man pages main menu

Contact us      |       About us      |       Term of use      |       Copyright © 2000-2010 MyWebUniversity.com ™