.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
-.TH SEM_WAIT 3 2017-03-13 "Linux" "Linux Programmer's Manual"
+.TH SEM_WAIT 3 2017-09-15 "Linux" "Linux Programmer's Manual"
.SH NAME
sem_wait, sem_timedwait, sem_trywait \- lock a semaphore
.SH SYNOPSIS
.nf
.B #include <semaphore.h>
-.sp
+.PP
.BI "int sem_wait(sem_t *" sem );
-.sp
+.PP
.BI "int sem_trywait(sem_t *" sem );
-.sp
+.PP
.BI "int sem_timedwait(sem_t *" sem ", const struct timespec *" abs_timeout );
.fi
-.sp
+.PP
Link with \fI\-pthread\fP.
-.sp
+.PP
.in -4n
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.in
-.sp
+.PP
.BR sem_timedwait ():
_POSIX_C_SOURCE\ >=\ 200112L
.SH DESCRIPTION
then the call blocks until either it becomes possible to perform
the decrement (i.e., the semaphore value rises above zero),
or a signal handler interrupts the call.
-
+.PP
.BR sem_trywait ()
is the same as
.BR sem_wait (),
set to
.BR EAGAIN )
instead of blocking.
-
+.PP
.BR sem_timedwait ()
is the same as
.BR sem_wait (),
argument points to a structure that specifies an absolute timeout
in seconds and nanoseconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC).
This structure is defined as follows:
-
-.nf
+.PP
.in +4n
+.EX
struct timespec {
time_t tv_sec; /* Seconds */
long tv_nsec; /* Nanoseconds [0 .. 999999999] */
};
+.EE
.in
-.fi
.PP
If the timeout has already expired by the time of the call,
and the semaphore could not be locked immediately,
.RI ( errno
set to
.BR ETIMEDOUT ).
-
+.PP
If the operation can be performed immediately, then
.BR sem_timedwait ()
never fails with a timeout error, regardless of the value of
of the timeout, in seconds, for
.BR sem_timedwait ().
The following shows what happens on two different runs of the program:
-
+.PP
.in +4n
-.nf
+.EX
.RB "$" " ./a.out 2 3"
About to call sem_timedwait()
sem_post() from handler
.RB "$" " ./a.out 2 1"
About to call sem_timedwait()
sem_timedwait() timed out
-.fi
+.EE
.in
.SS Program source
\&
-.nf
+.EX
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
exit((s == 0) ? EXIT_SUCCESS : EXIT_FAILURE);
}
-.fi
+.EE
.SH SEE ALSO
.BR clock_gettime (2),
.BR sem_getvalue (3),