*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->FreeBSD man pages -> sx_try_xlock (9)              
Title
Content
Arch
Section
 

SX(9)

Contents


NAME    [Toc]    [Back]

     sx, sx_init, sx_destroy, sx_slock, sx_xlock, sx_try_slock, sx_try_xlock,
     sx_sunlock, sx_xunlock, sx_try_upgrade, sx_downgrade, sx_assert,
     SX_SYSINIT -- kernel shared/exclusive lock

SYNOPSIS    [Toc]    [Back]

     #include <sys/param.h>
     #include <sys/lock.h>
     #include <sys/mutex.h>
     #include <sys/sx.h>

     void
     sx_init(struct sx *sx, const char *description);

     void
     sx_destroy(struct sx *sx);

     void
     sx_slock(struct sx *sx);

     void
     sx_xlock(struct sx *sx);

     int
     sx_try_slock(struct sx *sx);

     int
     sx_try_xlock(struct sx *sx);

     void
     sx_sunlock(struct sx *sx);

     void
     sx_xunlock(struct sx *sx);

     int
     sx_try_upgrade(struct sx *sx);

     void
     sx_downgrade(struct sx *sx);

     void
     sx_assert(struct sx *sx, int what);

     SX_SYSINIT(name, struct sx *sx, const char *description);

DESCRIPTION    [Toc]    [Back]

     Shared/exclusive locks are used to protect data that are read far more
     often than they are written.  Mutexes are inherently more efficient than
     shared/exclusive locks, so shared/exclusive locks should be used prudently.


     Shared/exclusive locks are created with sx_init(), where sx is a pointer
     to space for a struct sx, and description is a pointer to a null-terminated
 character string that describes the shared/exclusive lock.
     Shared/exclusive locks are destroyed with sx_destroy().  Threads acquire
     and release a shared lock by calling sx_slock() or sx_try_slock() and
     sx_sunlock().  Threads acquire and release an exclusive lock by calling
     sx_xlock() or sx_try_xlock() and sx_xunlock().  A thread can attempt to
     upgrade a currently owned shared lock to an exclusive lock by calling
     sx_try_upgrade().	A thread that owns an exclusive lock can downgrade it
     to a shared lock by calling sx_downgrade().

     sx_try_slock() and sx_try_xlock() will return 0 if the shared/exclusive
     lock cannot be acquired immediately; otherwise the shared/exclusive lock
     will be acquired and a non-zero value will be returned.

     sx_try_upgrade() will return 0 if the shared lock cannot be upgraded to
     an exclusive lock immediately; otherwise the exclusive lock will be
     acquired and a non-zero value will be returned.

     The sx_assert() function tests specified conditions and panics if they
     are not met and the kernel is compiled with INVARIANTS.

     The SX_SYSINIT() macro is used to generate a call to the sx_sysinit()
     routine at system startup in order to initialize a given sx lock.	The
     parameters are the same as sx_init() but with an additional argument,
     name, that is used in generating unique variable names for the related
     structures associated with the lock and the sysinit routine.

     The following assertions are supported:

     SX_LOCKED	 Assert that the current thread has either a shared or an
		 exclusive lock on the sx lock pointed to by the first argument.


     SX_SLOCKED  Assert that the current thread has a shared lock on the sx
		 lock pointed to by the first argument.

     SX_XLOCKED  Assert that the current thread has an exclusive lock on the
		 sx lock pointed to by the first argument.

     A thread may not own a shared lock and an exclusive lock simultaneously;
     attempting to do so will result in deadlock.

CONTEXT    [Toc]    [Back]

     It is allowed to own a shared lock or an exclusive lock while sleeping.

SEE ALSO    [Toc]    [Back]

      
      
     condvar(9), mtx_pool(9), mutex(9), sema(9)

BUGS    [Toc]    [Back]

     Currently there is no way to assert that a lock is not held.  This is not
     possible in the non-WITNESS case for asserting that this thread does not
     hold a shared lock.  In the non-WITNESS case, the SX_LOCKED and
     SX_SLOCKED assertions merely check that some thread holds a shared lock.
     They do not ensure that the current thread holds a shared lock.


FreeBSD 5.2.1			August 14, 2001 		 FreeBSD 5.2.1
[ Back ]
 Similar pages
Name OS Title
plock HP-UX lock process, text, data, stack, or shared library in memory
lockmgr OpenBSD kernel lock functions
simple_lock_try NetBSD kernel lock functions
simple_lock NetBSD kernel lock functions
lock OpenBSD kernel lock functions
simple_lock_init NetBSD kernel lock functions
lockinit NetBSD kernel lock functions
simple_lock_unlock NetBSD kernel lock functions
lockinit OpenBSD kernel lock functions
lock NetBSD kernel lock functions
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service