Tools: Add a copyable SharedSemaphore

This commit is contained in:
Dennis Klein 2019-09-01 15:40:00 +02:00 committed by Dennis Klein
parent 0e5f648d2b
commit 5d6184cd1a
2 changed files with 42 additions and 1 deletions

View File

@ -45,6 +45,29 @@ auto Semaphore::GetCount() -> std::size_t
return fCount;
}
SharedSemaphore::SharedSemaphore()
: fSemaphore(std::make_shared<Semaphore>())
{}
SharedSemaphore::SharedSemaphore(std::size_t initial_count)
: fSemaphore(std::make_shared<Semaphore>(initial_count))
{}
auto SharedSemaphore::Wait() -> void
{
fSemaphore->Wait();
}
auto SharedSemaphore::Signal() -> void
{
fSemaphore->Signal();
}
auto SharedSemaphore::GetCount() -> std::size_t
{
return fSemaphore->GetCount();
}
} /* namespace tools */
} /* namespace mq */
} /* namespace fair */

View File

@ -12,6 +12,7 @@
#include <condition_variable>
#include <cstdint>
#include <functional>
#include <memory>
#include <mutex>
namespace fair {
@ -24,7 +25,7 @@ namespace tools {
*/
struct Semaphore
{
explicit Semaphore();
Semaphore();
explicit Semaphore(std::size_t initial_count);
auto Wait() -> void;
@ -37,6 +38,23 @@ private:
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 */