Program Listing for File DistributedTimeoutBarrier.hpp

Return to documentation for file (include/uitsl/distributed/DistributedTimeoutBarrier.hpp)

#pragma once
#ifndef UITSL_DISTRIBUTED_DISTRIBUTEDTIMEOUTBARRIER_HPP_INCLUDE
#define UITSL_DISTRIBUTED_DISTRIBUTEDTIMEOUTBARRIER_HPP_INCLUDE

#include <thread>

#include <mpi.h>

#include "../countdown/Timer.hpp"
#include "../mpi/mpi_utils.hpp"
#include "../parallel/ThreadIbarrier.hpp"

#include "IbarrierRequest.hpp"

namespace uitsl {

// TODO is Ibarrier request leaked?
template<typename Timer_T=uitsl::Timer<>>
class DistributedTimeoutBarrier {

  uitsl::IbarrierRequest proc_barrier;

public:

  DistributedTimeoutBarrier(
    const Timer_T& timer=Timer_T{},
    MPI_Comm comm=MPI_COMM_WORLD
  ) : proc_barrier(comm) {

    while (!proc_barrier.IsComplete() && !timer.IsComplete());

  }

};

} // namespace uitsl

#endif // #ifndef UITSL_DISTRIBUTED_DISTRIBUTEDTIMEOUTBARRIER_HPP_INCLUDE