MUTEX_ASSERT_UNLOCKED man page on OpenBSD

Man page or keyword search:  
man Server   11362 pages
apropos Keyword Search (all sections)
Output format
OpenBSD logo
[printable version]

MUTEX(9)		     OpenBSD Kernel Manual		      MUTEX(9)

NAME
     mutex, mtx_init, mtx_enter, mtx_enter_try, mtx_leave - interface to CPU
     mutexes

SYNOPSIS
     #include <sys/mutex.h>

     void
     mtx_init(struct mutex *mtxp, int wantipl);

     void
     mtx_enter(struct mutex *mtxp);

     int
     mtx_enter_try(struct mutex *mtxp);

     void
     mtx_leave(struct mutex *mtxp);

     MUTEX_ASSERT_LOCKED(struct mutex *mtxp);

     MUTEX_ASSERT_UNLOCKED(struct mutex *mtxp);

DESCRIPTION
     The mutex set of functions provides a non-recursive, interrupt-aware
     spinning mechanism to ensure mutual exclusion between different CPUs.

     The mtx_init() function is used to initiate the mutex pointed to by mtxp.
     When acquired, the mutex will cause the processor interrupt level to be
     raised to wantipl if necessary.

     The mtx_enter() function acquires a mutex, spinning if necessary.

     The mtx_enter_try() function attempts to acquire a mutex.	If it succeeds
     in acquiring the mutex it will return non-zero, otherwise it will return
     0.

     The mtx_leave() function releases a mutex.	 In case the acquisition of
     the mutex caused the interrupt level to be changed, it is then restored.

     The MUTEX_ASSERT_LOCKED() and MUTEX_ASSERT_UNLOCKED() macros may be used
     to assert that a mutex is held locked or unlocked by the current CPU.

SEE ALSO
     lockmgr(9), rwlock(9), spl(9)

HISTORY
     The mutex functions first appeared in OpenBSD 3.6.

AUTHORS
     The mutex functions were written by Artur Grabowski <art@openbsd.org>.

CAVEATS
     As these are spinning locks, don't sleep while holding one.

     If using a mutex in an interrupt handler, locks must be initialised with
     the correct IPL or deadlock will occur.

     Multiple mutexes may be nested, but not interleaved.  This is okay:

	   mtx_enter(foo);
	   mtx_enter(bar);
	   mtx_leave(bar);
	   mtx_leave(foo);

     While this is not:

	   mtx_enter(foo);
	   mtx_enter(bar);
	   mtx_leave(foo);
	   mtx_leave(bar);

OpenBSD 4.9			August 8, 2010			   OpenBSD 4.9
[top]

List of man pages available for OpenBSD

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net