mirror of
https://github.com/boostorg/atomic.git
synced 2026-01-19 16:12:09 +00:00
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.
41 lines
817 B
C++
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;
|
|
}
|