Program Listing for File ThreadSafeIbarrierRequest.hpp¶
↰ Return to documentation for file (include/uitsl/concurrent/ThreadSafeIbarrierRequest.hpp)
#pragma once
#ifndef UITSL_CONCURRENT_THREADSAFEIBARRIERREQUEST_HPP_INCLUDE
#define UITSL_CONCURRENT_THREADSAFEIBARRIERREQUEST_HPP_INCLUDE
#include <mutex>
#include <mpi.h>
#include "../../../third-party/Empirical/source/base/optional.h"
#include "../distributed/IbarrierRequest.hpp"
namespace uitsl {
class ThreadSafeIbarrierRequest {
emp::optional<uitsl::IbarrierRequest> request{ std::nullopt };
static inline std::mutex mutex{};
public:
ThreadSafeIbarrierRequest(const MPI_Comm comm=MPI_COMM_WORLD) {
const std::lock_guard guard{ mutex };
request.emplace(comm);
}
bool IsComplete() const {
const std::lock_guard guard{ mutex };
return request->IsComplete();
}
};
} // namespace uitsl
#endif // #ifndef UITSL_CONCURRENT_THREADSAFEIBARRIERREQUEST_HPP_INCLUDE