rt 0.17.0

A real-time operating system capable of full preemption
Documentation
#include <rt/barrier.h>

bool rt_barrier_wait(struct rt_barrier *barrier)
{
    rt_mutex_lock(&barrier->mutex);
    const unsigned int generation = barrier->generation;
    ++barrier->level;
    const bool is_leader = barrier->level == barrier->threshold;
    if (is_leader)
    {
        barrier->level = 0;
        ++barrier->generation;
        rt_cond_broadcast(&barrier->cond);
    }
    else
    {
        while (generation == barrier->generation)
        {
            rt_cond_wait(&barrier->cond, &barrier->mutex);
        }
    }
    rt_mutex_unlock(&barrier->mutex);
    return is_leader;
}