// A single use synch barrier. class Barrier{ private: // Synchronization variables Lock lock; CV allCheckedIn; // State variables int numEntered; int numThreads; public: Barrier(int n); ~Barrier(); void checkin(); }; Barrier::Barrier(int n) { numEntered = 0; numThreads = n; } // No one returns until all threads // have called checkin. void checkin() { lock.acquire(); numEntered++; if (numEntered < numThreads) { while (numEntered < numThreads) allCheckedIn.wait(&lock); } else { // last thread to checkin allCheckedIn.broadcast(); } lock.release(); }