|
| ||||||||||||||||||
| SX_LOCKED |
Assert that the current thread has either a shared or an exclusive lock on the
.Vt sx lock pointed to by the first argument. |
| SX_SLOCKED |
Assert that the current thread has a shared lock on the
.Vt sx lock pointed to by the first argument. |
| SX_XLOCKED |
Assert that the current thread has an exclusive lock on the
.Vt sx lock pointed to by the first argument. |
| SX_UNLOCKED | |
|
Assert that the current thread has no lock on the
.Vt sx lock pointed to by the first argument. | |
sx_xlocked will return non-zero if the current process holds the exclusive lock; otherwise, it will return zero.
For ease of programming, sx_unlock is provided as a macro frontend to the respective functions, sx_sunlock and sx_xunlock. Algorithms that are aware of what state the lock is in should use either of the two specific functions for a minor performance benefit.
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.
A thread may not hold both a shared lock and an exclusive lock on the same lock simultaneously; attempting to do so will result in deadlock.
A thread may hold a shared or exclusive lock on an sx lock while sleeping. As a result, an sx lock may not be acquired while holding a mutex. Otherwise, if one thread slept while holding an sx lock while another thread blocked on the same sx lock after acquiring a mutex, then the second thread would effectively end up sleeping while holding a mutex, which is not allowed.
condvar(9), mtx_pool(9), mutex(9), panic(9), sema(9)
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.
| January 5, 2005 | SX (9) |
Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.