MyWebUniversity.com Home Page
 



OpenSolaris man pages main menu


Standard C Library Functions               pthreadmutexlock(3C)



NAME
     pthreadmutexlock,                   pthreadmutextrylock,
     pthreadmutexunlock - lock or unlock a mutex

SYNOPSIS
     cc -mt [ flag... ] file... -lpthread [ library... ]
     #include 

     int pthreadmutexlock(pthreadmutext *mutex);


     int pthreadmutextrylock(pthreadmutext *mutex);


     int pthreadmutexunlock(pthreadmutext *mutex);


DESCRIPTION
     The mutex object referenced by mutex is  locked  by  calling
     pthreadmutexlock().  If  the  mutex is already locked, the
     calling thread blocks until  the  mutex  becomes  available.
     This  operation  returns with the mutex object referenced by
     mutex in the locked state with the  calling  thread  as  its
     owner.


     If the mutex type is  PTHREADMUTEXNORMAL, deadlock  detec-
     tion  is not provided. Attempting to relock the mutex causes
     deadlock. If a thread attempts to unlock a mutex that it has
     not  locked  or a mutex that is unlocked, undefined behavior
     results.


     If the mutex type is  PTHREADMUTEXERORCHECK,  then  error
     checking is provided. If a thread attempts to relock a mutex
     that it has already locked, an error will be returned. If  a
     thread  attempts to unlock a mutex that it has not locked or
     a mutex which is unlocked, an error will be returned.


     If the mutex  type  is   PTHREADMUTEXRECURSIVE,  then  the
     mutex   maintains the concept of a lock count. When a thread
     successfully acquires a mutex for the first time,  the  lock
     count  is  set to 1. Every time a thread relocks this mutex,
     the lock count is  incremented by one. Each time the  thread
     unlocks  the  mutex,  the  lock count is decremented by one.
     When the lock count reaches  0, the mutex becomes  available
     for  other  threads  to  acquire.  If  a thread  attempts to
     unlock a mutex that it has not locked or  a  mutex  that  is
     unlocked, an error will be returned.





SunOS 5.11          Last change: 11 Nov 2008                    1






Standard C Library Functions               pthreadmutexlock(3C)



     If the mutex type is  PTHREADMUTEXDEFAULT,  attempting  to
     recursively  lock  the  mutex results in undefined behavior.
     Attempting to  unlock the mutex if it was not locked by  the
     calling  thread results in undefined behavior. Attempting to
     unlock the mutex if it is not locked  results  in  undefined
     behavior.


     The  pthreadmutextrylock()  function   is   identical   to
     pthreadmutexlock()  except that if the mutex object refer-
     enced by mutex is currently locked (by any thread, including
     the current thread), the call fails immediately with EBUSY.


     The  pthreadmutexunlock()  function  releases  the   mutex
     object  referenced  by mutex. The manner in which a mutex is
     released is dependent upon the mutex's  type  attribute.  If
     there  are threads blocked on the mutex object referenced by
     mutex when pthreadmutexunlock() is  called,  resulting  in
     the mutex  becoming available, the scheduling policy is used
     to determine  which thread will acquire the mutex.  (In  the
     case  of  PTHREADMUTEXRECURSIVE mutexes, the mutex becomes
     available when the count reaches  0 and the  calling  thread
     no longer has any locks on this mutex.)


     If a signal is delivered to a thread waiting  for  a  mutex,
     upon return from the signal handler the thread resumes wait-
     ing for the mutex as if it was not interrupted.

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


     The  pthreadmutextrylock() function returns  0 if  a  lock
     on  the mutex object referenced by mutex is acquired. Other-
     wise, an error number is returned to indicate the error.

ERORS
     The  pthreadmutexlock() and pthreadmutextrylock()  func-
     tions will fail if:

     EAGAIN    The mutex could not be acquired because  the  max-
               imum  number of recursive locks for mutex has been
               exceeded.


     EINVAL    The mutex was created with the protocol  attribute
               having the value PTHREADPRIOPROTECT and the cal-
               ling thread's priority is higher than the  mutex's



SunOS 5.11          Last change: 11 Nov 2008                    2






Standard C Library Functions               pthreadmutexlock(3C)



               current priority ceiling.


     EPERM     The mutex was created with the protocol  attribute
               having the value PTHREADPRIOPROTECT and the cal-
               ling  thread  is  not  in  the   real-time   class
               (SCHEDR or SCHEDFIFO scheduling class).



     The  pthreadmutextrylock() function will fail if:

     EBUSY    The mutex could not  be  acquired  because  it  was
              already locked.



     The    pthreadmutexlock(),   pthreadmutextrylock()   and
     pthreadmutexunlock() functions may fail if:

     EINVAL    The value specified by mutex does not refer to  an
               initialized mutex object.



     The  pthreadmutexlock() function may fail if:

     EDEADLK    The current thread already owns the mutex.


     ENOMEM     The limit on the number  of  simultaneously  held
                mutexes has been exceeded.



     The  pthreadmutexunlock() function will fail if:

     EPERM    The mutex type is PTHREADMUTEXERORCHECK  or  the
              mutex  is  a  robust  mutex, and the current thread
              does not own the mutex.



     When a  thread  makes  a  call  to  pthreadmutexlock()  or
     pthreadmutextrylock(),  if  the  mutex is initialized with
     the    robustness     attribute     having     the     value
     PTHREADMUTEXROBUST  (see pthreadmutexattrgetrobust(3C)),
     the call will return these error values if:

     EOWNERDEAD         The last owner of this mutex  died  while
                        holding  the  mutex,  or the process con-
                        taining the owner of the  mutex  unmapped



SunOS 5.11          Last change: 11 Nov 2008                    3






Standard C Library Functions               pthreadmutexlock(3C)



                        the  memory  containing the mutex or per-
                        formed one of the exec(2) functions. This
                        mutex  is  now  owned  by the caller. The
                        caller must now attempt to make the state
                        protected  by the mutex consistent. If it
                        is able to clean up the  state,  then  it
                        should   call  pthreadmutexconsistent()
                        for the mutex and unlock the mutex.  Sub-
                        sequent calls to pthreadmutexlock() and
                        pthreadmutextrylock() will behave  nor-
                        mally,  as  before.  If the caller is not
                        able   to    clean    up    the    state,
                        pthreadmutexconsistent()  should not be
                        called  for  the  mutex,  but  the  mutex
                        should  be  unlocked. Subsequent calls to
                        pthreadmutexlock()                  and
                        pthreadmutextrylock()   will   fail  to
                        acquire the mutex with  the  error  value
                        ENOTRECOVERABLE.   If   the   owner   who
                        acquired the lock with  EOWNERDEAD  dies,
                        the next owner will acquire the lock with
                        EOWNERDEAD.


     ENOTRECOVERABLE    The mutex trying to be acquired was  pro-
                        tecting  the  state  that  has  been left
                        irrecoverable by the mutex's last  owner.
                        The  mutex  has  not  been acquired. This
                        condition can occur  when  the  lock  was
                        previously  acquired with EOWNERDEAD, and
                        the owner was not able to  clean  up  the
                        state and unlocked the mutex without cal-
                        ling pthreadmutexconsistent().


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

















SunOS 5.11          Last change: 11 Nov 2008                    4






Standard C Library Functions               pthreadmutexlock(3C)



     
           ATRIBUTE TYPE               ATRIBUTE VALUE       
    
     Interface Stability          Committed                   
    
     MT-Level                     MT-Safe                     
    
     Standard                     See standards(5).           
    


SEE ALSO
     pthreadmutexconsistent(3C),        pthreadmutexinit(3C),
     pthreadmutexattrsetprotocol(3C),
     pthreadmutexattrsetrobust(3C),
     pthreadmutexattrsettype(3C), attributes(5), standards(5)

NOTES
     In    the     current     implementation     of     threads,
     pthreadmutexlock(),  pthreadmutexunlock(), mutexlock(),
     mutexunlock(), pthreadmutextrylock(), and mutextrylock()
     do not validate the mutex type.  Therefore, an uninitialized
     mutex or a mutex with an invalid type does not return   EIN-
     VAL.  Interfaces  for  mutexes  with  an  invalid  type have
     unspecified behavior.


     Uninitialized mutexes that are allocated locally may contain
     junk  data.  Such  mutexes  need  to  be  initialized  using
     pthreadmutexinit() or  mutexinit().

























SunOS 5.11          Last change: 11 Nov 2008                    5



OpenSolaris man pages main menu

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