_lwp_sema_wait(S)
_lwp_sema_wait --
acquire a semaphore
Synopsis
#include <synch.h>
int _lwp_sema_wait(_lwp_sema_t *sema);
Parameters
sema-
pointer to the semaphore to acquire
Description
_lwp_sema_wait attempts to acquire the
semaphore pointed to by sema by decrementing the semaphore value.
If the resulting value is greater than or equal to zero,
it returns to the caller having successfully acquired the lock.
If the semaphore count is zero or negative upon entry,
_lwp_sema_wait suspends execution of the calling lightweight process (LWP)
and places it on a
queue associated with that semaphore where it remains until
the lock becomes available to the caller,
at which point _lwp_sema_wait returns with the lock held.
If an LWP waiting on a semaphore is interrupted by a signal,
the signal handler will run,
but _lwp_sema_wait is always restarted so the semaphore is acquired on return.
sema parameter
sema must previously have been initialized,
either by _lwp_sema_init or statically (see _lwp_sema_init).
Return values
_lwp_sema_wait returns zero for success
and an error number for failure, as described below.
Errors
If any of the following conditions is detected,
_lwp_sema_wait fails and returns the corresponding value:
EFAULT-
The sema parameter points to an illegal address.
(This error may not be detected; a SIGSEGV signal may be posted to the
faulting LWP if an illegal address is used.)
If any of the following conditions occurs,
_lwp_sema_wait fails and returns the corresponding value:
EINTR-
The operation was interrupted by a signal or a fork operation.
Usage
In general, this operation is used to block wait for an event,
when a critical section is long.
References
_lwp_sema_init(S),
_lwp_sema_post(S),
_lwp_sema_trywait(S),
sema_destroy(SYNCH),
sema_init(SYNCH),
sema_post(SYNCH),
sema_trywait(SYNCH),
sema_wait(SYNCH)
Notices
Lightweight processes (LWPs) are internal interfaces and are subject
to change. Their use should be avoided.
© 2005 The SCO Group, Inc. All rights reserved.
SCO OpenServer Release 6.0.0 - 01 June 2005