PostgreSQL Source Code git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
pg_pthread.h File Reference
#include <pthread.h>
Include dependency graph for pg_pthread.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  pg_pthread_barrier
 

Macros

#define PTHREAD_BARRIER_SERIAL_THREAD   (-1)
 

Typedefs

typedef struct pg_pthread_barrier pthread_barrier_t
 

Functions

int pthread_barrier_init (pthread_barrier_t *barrier, const void *attr, int count)
 
int pthread_barrier_wait (pthread_barrier_t *barrier)
 
int pthread_barrier_destroy (pthread_barrier_t *barrier)
 

Macro Definition Documentation

◆ PTHREAD_BARRIER_SERIAL_THREAD

#define PTHREAD_BARRIER_SERIAL_THREAD   (-1)

Definition at line 21 of file pg_pthread.h.

Typedef Documentation

◆ pthread_barrier_t

Function Documentation

◆ pthread_barrier_destroy()

int pthread_barrier_destroy ( pthread_barrier_t barrier)

Definition at line 72 of file pthread_barrier_wait.c.

73{
74 pthread_cond_destroy(&barrier->cond);
75 pthread_mutex_destroy(&barrier->mutex);
76 return 0;
77}
static THREAD_BARRIER_T barrier
Definition: pgbench.c:480

References barrier.

◆ pthread_barrier_init()

int pthread_barrier_init ( pthread_barrier_t barrier,
const void *  attr,
int  count 
)

Definition at line 19 of file pthread_barrier_wait.c.

20{
21 int error;
22
23 barrier->sense = false;
24 barrier->count = count;
25 barrier->arrived = 0;
26 if ((error = pthread_cond_init(&barrier->cond, NULL)) != 0)
27 return error;
28 if ((error = pthread_mutex_init(&barrier->mutex, NULL)) != 0)
29 {
30 pthread_cond_destroy(&barrier->cond);
31 return error;
32 }
33
34 return 0;
35}
int pthread_mutex_init(pthread_mutex_t *mp, void *attr)
Definition: pthread-win32.c:35
static void error(void)
Definition: sql-dyntest.c:147

References barrier, error(), and pthread_mutex_init().

◆ pthread_barrier_wait()

int pthread_barrier_wait ( pthread_barrier_t barrier)

Definition at line 38 of file pthread_barrier_wait.c.

39{
40 bool initial_sense;
41
43
44 /* We have arrived at the barrier. */
45 barrier->arrived++;
46 Assert(barrier->arrived <= barrier->count);
47
48 /* If we were the last to arrive, release the others and return. */
49 if (barrier->arrived == barrier->count)
50 {
51 barrier->arrived = 0;
52 barrier->sense = !barrier->sense;
54 pthread_cond_broadcast(&barrier->cond);
55
57 }
58
59 /* Wait for someone else to flip the sense. */
60 initial_sense = barrier->sense;
61 do
62 {
63 pthread_cond_wait(&barrier->cond, &barrier->mutex);
64 } while (barrier->sense == initial_sense);
65
67
68 return 0;
69}
#define Assert(condition)
Definition: c.h:815
#define PTHREAD_BARRIER_SERIAL_THREAD
Definition: pg_pthread.h:21
int pthread_mutex_unlock(pthread_mutex_t *mp)
Definition: pthread-win32.c:60
int pthread_mutex_lock(pthread_mutex_t *mp)
Definition: pthread-win32.c:42

References Assert, barrier, PTHREAD_BARRIER_SERIAL_THREAD, pthread_mutex_lock(), and pthread_mutex_unlock().