2016-06-28 04:20:47 -04:00
|
|
|
/*
|
|
|
|
* APPLE Compatibility
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifdef __APPLE__
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Missing POSIX Thread Barriers implementation
|
|
|
|
*/
|
|
|
|
#ifndef PTHREAD_BARRIER_H_
|
|
|
|
#define PTHREAD_BARRIER_H_
|
|
|
|
|
|
|
|
#include <pthread.h>
|
|
|
|
#include <errno.h>
|
|
|
|
|
|
|
|
typedef int pthread_barrierattr_t;
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
pthread_mutex_t mutex;
|
|
|
|
pthread_cond_t cond;
|
|
|
|
int count;
|
|
|
|
int tripCount;
|
|
|
|
} pthread_barrier_t;
|
|
|
|
|
|
|
|
|
|
|
|
int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count);
|
|
|
|
|
|
|
|
int pthread_barrier_destroy(pthread_barrier_t *barrier);
|
|
|
|
|
|
|
|
int pthread_barrier_wait(pthread_barrier_t *barrier);
|
|
|
|
|
|
|
|
#endif // PTHREAD_BARRIER_H_
|
|
|
|
|
|
|
|
|
2019-05-11 05:14:59 -04:00
|
|
|
// macOS < 10.12 doesn't have clock_gettime()
|
|
|
|
#include <time.h>
|
|
|
|
#if !defined(CLOCK_REALTIME) && !defined(CLOCK_MONOTONIC)
|
2016-06-28 04:20:47 -04:00
|
|
|
|
2019-05-11 05:14:59 -04:00
|
|
|
#define CLOCK_REALTIME 0
|
|
|
|
#define CLOCK_MONOTONIC 6
|
|
|
|
typedef int clockid_t;
|
|
|
|
|
|
|
|
#include <sys/time.h>
|
|
|
|
#include <mach/mach_time.h>
|
|
|
|
|
|
|
|
// here to avoid problem on linking of qrtplib
|
|
|
|
inline int clock_gettime( clockid_t clk_id, struct timespec *ts )
|
|
|
|
{
|
|
|
|
int ret = -1;
|
|
|
|
if ( ts )
|
|
|
|
{
|
|
|
|
if ( CLOCK_REALTIME == clk_id )
|
|
|
|
{
|
|
|
|
struct timeval tv;
|
|
|
|
ret = gettimeofday(&tv, NULL);
|
|
|
|
ts->tv_sec = tv.tv_sec;
|
|
|
|
ts->tv_nsec = tv.tv_usec * 1000;
|
|
|
|
}
|
|
|
|
else if ( CLOCK_MONOTONIC == clk_id )
|
|
|
|
{
|
|
|
|
const uint64_t t = mach_absolute_time();
|
|
|
|
mach_timebase_info_data_t timebase;
|
|
|
|
mach_timebase_info(&timebase);
|
|
|
|
const uint64_t tdiff = t * timebase.numer / timebase.denom;
|
|
|
|
ts->tv_sec = tdiff / 1000000000;
|
|
|
|
ts->tv_nsec = tdiff % 1000000000;
|
|
|
|
ret = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // CLOCK_REALTIME and CLOCK_MONOTONIC
|
|
|
|
|
|
|
|
#endif // __APPLE__
|