# FairMQ: fairmq/tools/Semaphore.h Source File

Semaphore.h
/********************************************************************************
* 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();
explicit Semaphore(std::size_t initial_count);
auto Wait() -> void;
auto Signal() -> void;
auto GetCount() const -> std::size_t;
private:
std::size_t fCount;
mutable std::mutex fMutex;
std::condition_variable fCv;
};
struct SharedSemaphore
{
SharedSemaphore();
explicit SharedSemaphore(std::size_t initial_count);
auto Wait() -> void;
auto Signal() -> void;
auto GetCount() const -> std::size_t;
private:
std::shared_ptr<Semaphore> fSemaphore;
};
} /* namespace tools */
} /* namespace mq */
} /* namespace fair */
#endif /* FAIR_MQ_TOOLS_SEMAPHORE_H */
fair::mq::tools::Semaphore
A simple blocking semaphore.
Definition: Semaphore.h:26
fair::mq::tools::SharedSemaphore
A simple copyable blocking semaphore.
Definition: Semaphore.h:45
fair
Tools for interfacing containers to the transport via polymorphic allocators.
Definition: DeviceRunner.h:23

privacy