SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
Semaphore.h
Go to the documentation of this file.
1 /*
2  * SWC-DB© Copyright since 2019 Alex Kashirin <kashirin.alex@gmail.com>
3  * License details at <https://github.com/kashirin-alex/swc-db/#license>
4  */
5 
6 #ifndef swcdb_core_Semaphore_h
7 #define swcdb_core_Semaphore_h
8 
9 
10 #include "swcdb/core/Compat.h"
11 #include <condition_variable>
12 
13 
14 namespace SWC { namespace Core {
15 
16 class Semaphore final {
17  public:
18 
19  explicit Semaphore(size_t sz=1, size_t pre_acquire = 0) noexcept;
20 
21  Semaphore(const Semaphore&) = delete;
22 
23  Semaphore(const Semaphore&&) = delete;
24 
25  Semaphore& operator=(const Semaphore&) = delete;
26 
27  ~Semaphore() noexcept;
28 
29  size_t available();
30 
31  bool has_pending();
32 
33  void acquire();
34 
35  void release();
36 
37  void wait_until_under_and_acquire(size_t sz);
38 
39  void wait_until_under(size_t sz);
40 
41  size_t wait_available();
42 
43  void wait_all();
44 
45  private:
46  std::mutex m_mutex;
47  std::condition_variable m_cv;
48  const size_t m_sz;
49  size_t m_count;
50 };
51 
52 
53 }} //namespace SWC::Core
54 
55 
56 
57 #ifdef SWC_IMPL_SOURCE
58 #include "swcdb/core/Semaphore.cc"
59 #endif
60 
61 #endif // swcdb_core_Semaphore_h
SWC::Core::Semaphore
Definition: Semaphore.h:16
SWC::Core::Semaphore::m_count
size_t m_count
Definition: Semaphore.h:49
SWC::Core::Semaphore::Semaphore
Semaphore(const Semaphore &)=delete
SWC::Core::Semaphore::acquire
void acquire()
Definition: Semaphore.cc:29
SWC::Core::Semaphore::available
size_t available()
Definition: Semaphore.cc:19
SWC::Core::Semaphore::wait_all
void wait_all()
Definition: Semaphore.cc:62
SWC::Core::Semaphore::Semaphore
Semaphore(size_t sz=1, size_t pre_acquire=0) noexcept
Definition: Semaphore.cc:13
SWC::Core::Semaphore::operator=
Semaphore & operator=(const Semaphore &)=delete
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::Core::Semaphore::~Semaphore
~Semaphore() noexcept
Definition: Semaphore.cc:17
Compat.h
SWC::Core::Semaphore::wait_until_under
void wait_until_under(size_t sz)
Definition: Semaphore.cc:49
SWC::Core::Semaphore::wait_until_under_and_acquire
void wait_until_under_and_acquire(size_t sz)
Definition: Semaphore.cc:42
SWC::Core::Semaphore::m_sz
const size_t m_sz
Definition: Semaphore.h:48
SWC::Core::Semaphore::wait_available
size_t wait_available()
Definition: Semaphore.cc:55
SWC::Core::Semaphore::has_pending
bool has_pending()
Definition: Semaphore.cc:24
SWC::Core::Semaphore::Semaphore
Semaphore(const Semaphore &&)=delete
SWC::Core::Semaphore::release
void release()
Definition: Semaphore.cc:36
SWC::Core::Semaphore::m_cv
std::condition_variable m_cv
Definition: Semaphore.h:47
Semaphore.cc
SWC::Core::Semaphore::m_mutex
std::mutex m_mutex
Definition: Semaphore.h:46