1 /*------------------------------------------------------------------------- 2 * 3 * barrier.h 4 * Barriers for synchronizing cooperating processes. 5 * 6 * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group 7 * Portions Copyright (c) 1994, Regents of the University of California 8 * 9 * src/include/storage/barrier.h 10 * 11 *------------------------------------------------------------------------- 12 */ 13 #ifndef BARRIER_H 14 #define BARRIER_H 15 16 /* 17 * For the header previously known as "barrier.h", please include 18 * "port/atomics.h", which deals with atomics, compiler barriers and memory 19 * barriers. 20 */ 21 22 #include "storage/condition_variable.h" 23 #include "storage/spin.h" 24 25 typedef struct Barrier 26 { 27 slock_t mutex; 28 int phase; /* phase counter */ 29 int participants; /* the number of participants attached */ 30 int arrived; /* the number of participants that have 31 * arrived */ 32 int elected; /* highest phase elected */ 33 bool static_party; /* used only for assertions */ 34 ConditionVariable condition_variable; 35 } Barrier; 36 37 extern void BarrierInit(Barrier *barrier, int num_workers); 38 extern bool BarrierArriveAndWait(Barrier *barrier, uint32 wait_event_info); 39 extern bool BarrierArriveAndDetach(Barrier *barrier); 40 extern int BarrierAttach(Barrier *barrier); 41 extern bool BarrierDetach(Barrier *barrier); 42 extern int BarrierPhase(Barrier *barrier); 43 extern int BarrierParticipants(Barrier *barrier); 44 45 #endif /* BARRIER_H */ 46