pthread_cond_timedwait() is available under OSX but neither PTHREAD_CONDATTR_SETPSHARED or pthread_condattr_setpshared are.
Here's a version we can use for any that lack a real pthread_mutex_timedlock(): /* * A pthread_mutex_timedlock() impl for OSX/macOS, which lacks the * real thing. * NOTE: Unlike the real McCoy, won't return EOWNERDEAD, EDEADLK * or EOWNERDEAD */ static int macos_pthread_mutex_timedlock(pthread_mutex_t *mutex, const struct timespec *abs_timeout) { int rv; struct timespec remaining, slept, ts; remaining = *abs_timeout; while ((rv = pthread_mutex_trylock(mutex)) == EBUSY) { ts.tv_sec = 0; ts.tv_nsec = (remaining.tv_sec > 0 ? 10000000 : (remaining.tv_nsec < 10000000 ? remaining.tv_nsec : 10000000)); nanosleep(&ts, &slept); ts.tv_nsec -= slept.tv_nsec; if (ts.tv_nsec <= remaining.tv_nsec) { remaining.tv_nsec -= ts.tv_nsec; } else { remaining.tv_sec--; remaining.tv_nsec = (1000000 - (ts.tv_nsec - remaining.tv_nsec)); } if (remaining.tv_sec < 0 || (!remaining.tv_sec && remaining.tv_nsec <= 0)) { return ETIMEDOUT; } } return rv; }