Warning: main(/www/www/htdocs/style/globals.php) [function.main]: failed to open stream: No such file or directory in /www/www/docs/6.4.1/neutrino/lib_ref/s/sem_timedwait.html on line 1
Warning: main() [function.include]: Failed opening '/www/www/htdocs/style/globals.php' for inclusion (include_path='.:/www/www/common:/www/www/php/lib/php') in /www/www/docs/6.4.1/neutrino/lib_ref/s/sem_timedwait.html on line 1
Warning: main(/www/www/htdocs/style/header.php) [function.main]: failed to open stream: No such file or directory in /www/www/docs/6.4.1/neutrino/lib_ref/s/sem_timedwait.html on line 8
Warning: main() [function.include]: Failed opening '/www/www/htdocs/style/header.php' for inclusion (include_path='.:/www/www/common:/www/www/php/lib/php') in /www/www/docs/6.4.1/neutrino/lib_ref/s/sem_timedwait.html on line 8
Wait on a semaphore, with a timeout
#include <semaphore.h>
#include <time.h>
int sem_timedwait(
sem_t * sem,
const struct timespec * abs_timeout );
- sem
- The semaphore that you want to wait on.
- abs_timeout
- A pointer to a
timespec
structure that specifies the maximum time to wait to lock the semaphore,
expressed as an absolute time.
libc
Use the -l c option to
qcc
to link against this library.
This library is usually included automatically.
The sem_timedwait() function locks the semaphore referenced by
sem as in the sem_wait() function.
However, if the semaphore can't be locked without waiting for another process
or thread to unlock the semaphore by calling
sem_post(),
the wait is terminated when the specified timeout expires.
The timeout expires when the absolute time specified by abs_timeout passes, as
measured by the clock on which timeouts are based (i.e. when the value of that clock
equals or exceeds abs_timeout), or if the absolute time specified by
abs_timeout has already been passed at the time of the call.
The timeout is based on the CLOCK_REALTIME clock.
- 0
- The calling process successfully performed the semaphore lock operation on
the semaphore designated by sem.
- -1
- The call was unsuccessful
(errno
is set). The state of the semaphore is unchanged.
- EDEADLK
- A deadlock condition was detected.
- EINTR
- A signal interrupted this function.
- EINVAL
- Invalid semaphore sem, or the thread would have blocked, and the
abs_timeout parameter specified a nanoseconds field value less
than zero or greater than or equal to 1000 million.
- ETIMEDOUT
- The semaphore couldn't be locked before the specified timeout expired.
#include <stdio.h>
#include <semaphore.h>
#include <time.h>
main(){
struct timespec tm;
sem_t sem;
int i=0;
sem_init( &sem, 0, 0);
do {
clock_gettime(CLOCK_REALTIME, &tm);
tm.tv_sec += 1;
i++;
printf("i=%d\n",i);
if (i==10) {
sem_post(&sem);
}
} while ( sem_timedwait( &sem, &tm ) == -1 );
printf("Semaphore acquired after %d timeouts\n", i);
return;
}
POSIX 1003.1 SEM TMO
Safety: | |
Cancellation point |
Yes |
Interrupt handler |
No |
Signal handler |
Yes |
Thread |
Yes |
sem_post(),
sem_trywait(),
sem_wait(),
time(),
timespec
Warning: main(/www/www/htdocs/style/footer.php) [function.main]: failed to open stream: No such file or directory in /www/www/docs/6.4.1/neutrino/lib_ref/s/sem_timedwait.html on line 207
Warning: main() [function.include]: Failed opening '/www/www/htdocs/style/footer.php' for inclusion (include_path='.:/www/www/common:/www/www/php/lib/php') in /www/www/docs/6.4.1/neutrino/lib_ref/s/sem_timedwait.html on line 207