1234567891011121314151617181920212223242526272829303132333435363738394041 |
- /*-------------------------------------------------------------------------
- *
- * Declarations for missing POSIX thread components.
- *
- * Currently this supplies an implementation of pthread_barrier_t for the
- * benefit of macOS, which lacks it. These declarations are not in port.h,
- * because that'd require <pthread.h> to be included by every translation
- * unit.
- *
- *-------------------------------------------------------------------------
- */
- #ifndef PG_PTHREAD_H
- #define PG_PTHREAD_H
- #include <pthread.h>
- #ifndef HAVE_PTHREAD_BARRIER_WAIT
- #ifndef PTHREAD_BARRIER_SERIAL_THREAD
- #define PTHREAD_BARRIER_SERIAL_THREAD (-1)
- #endif
- typedef struct pg_pthread_barrier
- {
- bool sense; /* we only need a one bit phase */
- int count; /* number of threads expected */
- int arrived; /* number of threads that have arrived */
- pthread_mutex_t mutex;
- pthread_cond_t cond;
- } pthread_barrier_t;
- extern int pthread_barrier_init(pthread_barrier_t *barrier,
- const void *attr,
- int count);
- extern int pthread_barrier_wait(pthread_barrier_t *barrier);
- extern int pthread_barrier_destroy(pthread_barrier_t *barrier);
- #endif
- #endif
|