#include "kernel/barrier.h" void barrierInit(Barrier *b, u64 total) { b->count = 0; b->total = total - 1; mutexInit(&b->mutex); condvarInit(&b->condvar); } void barrierWait(Barrier *b) { mutexLock(&b->mutex); if (b->count++ == b->total) { b->count = 0; condvarWake(&b->condvar, b->total); } else { condvarWait(&b->condvar, &b->mutex); } mutexUnlock(&b->mutex); }