xtd 0.2.0
semaphore.h
Go to the documentation of this file.
1 #pragma once
6 #include "wait_handle.h"
7 #include "../icomparable.h"
8 #include "../iequatable.h"
9 #include "../int32_object.h"
10 
12 namespace xtd {
14  namespace threading {
36  class core_export_ semaphore : public wait_handle, public icomparable<semaphore>, public iequatable<semaphore> {
37  class semaphore_base;
38  class named_semaphore;
39  class unnamed_semaphore;
40  struct data;
41  public:
43 
47  semaphore();
57  explicit semaphore(const ustring& name);
68  explicit semaphore(const ustring& name, bool& created_new);
74  explicit semaphore(int32 initial_count);
86  semaphore(int32 initial_count, const ustring& name);
99  semaphore(int32 initial_count, const ustring& name, bool& created_new);
107  semaphore(int32 initial_count, int32 maximum_count);
122  semaphore(int32 initial_count, int32 maximum_count, const ustring& name);
137  semaphore(int32 initial_count, int32 maximum_count, const ustring& name, bool& created_new);
139 
141  template <typename char_t>
142  explicit semaphore(const char_t* name) : semaphore(ustring(name)) {}
143  ~semaphore();
145 
147 
149  intptr handle() const noexcept override;
150  void handle(intptr value) override;
152 
154 
156  void close() override;
157 
158  int32 compare_to(const semaphore& value) const noexcept override;
159 
160  bool equals(const semaphore& value) const noexcept override;
161 
170  static semaphore open_existing(const ustring& name);
171 
178  int32 release();
186  int32 release(int32 release_count);
187 
195  static bool try_open_existing(const ustring& name, semaphore& result) noexcept;
197 
198  protected:
200 
202  bool signal() override;
203 
204  bool wait(int32 milliseconds_timeout) override;
206 
207  private:
208  void create(int32 initial_count, int32 maximum_count, bool& created_new);
209  std::shared_ptr<semaphore_base> semaphore_;
210  std::shared_ptr<data> data_;
211  };
212  }
213 }
signal
Specifies signals that can interrupt the current process.
Definition: signal.h:18
intmax_t intptr
Represent a pointer or a handle.
Definition: types.h:151
Contains xtd::threading::wait_handle exception.
Defines a generalized comparison method that a value type or class implements to create a type-specif...
Definition: icomparable.h:17
The xtd namespace contains all fundamental classes to access Hardware, Os, System, and more.
Definition: system_report.h:17
Limits the number of threads that can access a resource or pool of resources concurrently.
Definition: semaphore.h:36
Represents text as a sequence of UTF-8 code units.
Definition: ustring.h:46
Contains xtd::threading::semaphore_full_exception exception.
Build type release.
Defines a generalized method that a value type or class implements to create a type-specific method f...
Definition: iequatable.h:18
int_least32_t int32
Represents a 32-bit signed integer.
Definition: types.h:129
Encapsulates operating system specific objects that wait for exclusive access to shared resources...
Definition: wait_handle.h:48