Program Listing for File ConcurrentTimeoutBarrier.hpp¶
↰ Return to documentation for file (include/uitsl/concurrent/ConcurrentTimeoutBarrier.hpp)
#pragma once
#ifndef UITSL_CONCURRENT_CONCURRENTTIMEOUTBARRIER_HPP_INCLUDE
#define UITSL_CONCURRENT_CONCURRENTTIMEOUTBARRIER_HPP_INCLUDE
#include <thread>
#include <mpi.h>
#include "../countdown/Timer.hpp"
#include "../mpi/mpi_utils.hpp"
#include "../parallel/ParallelTimeoutBarrier.hpp"
#include "../parallel/ThreadIbarrier.hpp"
#include "ThreadSafeIbarrierRequest.hpp"
namespace uitsl {
// TODO is Ibarrier request leaked?
template<typename Timer_T=uitsl::Timer<>>
class ConcurrentTimeoutBarrier {
// TODO this won't work properly with different thread counts per process
uitsl::ThreadSafeIbarrierRequest proc_barrier;
public:
explicit ConcurrentTimeoutBarrier(
const uitsl::ThreadIbarrier& thread_barrier,
const Timer_T& timer=Timer_T{},
const MPI_Comm comm=MPI_COMM_WORLD
) : proc_barrier(comm) {
uitsl::ParallelTimeoutBarrier{thread_barrier, timer};
while (!proc_barrier.IsComplete() && !timer.IsComplete());
}
};
} // namespace uitsl
#endif // #ifndef UITSL_CONCURRENT_CONCURRENTTIMEOUTBARRIER_HPP_INCLUDE