2
0
mirror of https://github.com/boostorg/atomic.git synced 2026-01-19 16:12:09 +00:00
Files
atomic/config/has_pthread_cond_clockwait.cpp
Andrey Semashev 5991e99381 Added timed wait operations to lock pool.
Added a configure test for pthread_cond_clockwait presence. If it is
available, use it for timed waits with absolute timeouts on POSIX platforms.

Futex-based implementation has been improvved to use proper atomic operations
to access m_cond, which is needed to avoid races between the futex syscall and
our notifying operations. Also, check if m_cond has changed whil looping in
the waiting operations.
2025-06-08 04:37:51 +03:00

41 lines
817 B
C++

/*
* Copyright Andrey Semashev 2025.
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*/
#include <errno.h>
#include <time.h>
#include <pthread.h>
int main(int, char*[])
{
pthread_mutex_t mut;
pthread_mutex_init(&mut, nullptr);
pthread_cond_t cond;
pthread_cond_init(&cond, nullptr);
pthread_mutex_lock(&mut);
timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
ts.tv_sec += 1;
ts.tv_nsec += (int)0;
int err = pthread_cond_clockwait(&cond, &mut, CLOCK_REALTIME, &ts);
if (err == ETIMEDOUT)
{
(void)0;
}
pthread_mutex_unlock(&mut);
pthread_cond_destroy(&cond);
pthread_mutex_destroy(&mut);
return 0;
}