Exemple #1
0
void init_setup(){
	wiringPiSetup();
	pinMode(RED_LED, OUTPUT);
	pinMode(GREEN_LED, OUTPUT);
	pinMode(TRACK_SENS1, INPUT);
	pinMode(TRACK_SENS2, INPUT);
	setupBarrier();
}
Exemple #2
0
void ThreadPool::sync()
{
    Lock lock(this->thread_management);
    std::shared_ptr<Barrier> barrier;

    std::size_t num_workers = setupBarrier(barrier);
    synchronizeWorkers(num_workers, barrier);

    lock.unlock();
}
Exemple #3
0
void ThreadPool::safeJoin(bool remove_workers)
{
    Lock lock(this->thread_management);

    // don't allow a join from a worker thread
    if (this->unsafeIsCurrentThreadInPool())
    {
        lock.unlock();
        return;
    }

    // if a barrier already exists, just wait for that barrier to open
    // copy the shared_ptr so it doesn't get reset while waiting on it
    if (std::shared_ptr<Barrier> barrier = this->join_barrier)
    {
        lock.unlock();
        barrier->wait();
        return;
    }

    if (std::size_t num_workers = setupBarrier(this->join_barrier))
    { // don't setup a barrier if there are no workers
        if (remove_workers)
            unsafeRemoveWorkersLater(num_workers, nullptr);
        else
            synchronizeWorkers(num_workers, this->join_barrier);

        lock.unlock();

        // wait for the barrier to open, then destroy it
        this->join_barrier->wait();
        this->join_barrier.reset();
    }
    else
        lock.unlock();
}