FairMQ/fairmq/tools/Semaphore.h
2019-09-04 21:17:35 +02:00

63 lines
1.6 KiB
C++

/********************************************************************************
* Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
* *
* This software is distributed under the terms of the *
* GNU Lesser General Public Licence (LGPL) version 3, *
* copied verbatim in the file "LICENSE" *
********************************************************************************/
#ifndef FAIR_MQ_TOOLS_SEMAPHORE_H
#define FAIR_MQ_TOOLS_SEMAPHORE_H
#include <condition_variable>
#include <cstdint>
#include <functional>
#include <memory>
#include <mutex>
namespace fair {
namespace mq {
namespace tools {
/**
* @struct Semaphore Semaphore.h <fairmq/tools/Semaphore.h>
* @brief A simple blocking semaphore.
*/
struct Semaphore
{
Semaphore();
explicit Semaphore(std::size_t initial_count);
auto Wait() -> void;
auto Signal() -> void;
auto GetCount() -> std::size_t;
private:
std::size_t fCount;
std::mutex fMutex;
std::condition_variable fCv;
};
/**
* @struct SharedSemaphore Semaphore.h <fairmq/tools/Semaphore.h>
* @brief A simple copyable blocking semaphore.
*/
struct SharedSemaphore
{
SharedSemaphore();
explicit SharedSemaphore(std::size_t initial_count);
auto Wait() -> void;
auto Signal() -> void;
auto GetCount() -> std::size_t;
private:
std::shared_ptr<Semaphore> fSemaphore;
};
} /* namespace tools */
} /* namespace mq */
} /* namespace fair */
#endif /* FAIR_MQ_TOOLS_SEMAPHORE_H */