contur2
Loading...
Searching...
No Matches
semaphore.h
Go to the documentation of this file.
1
3
4#pragma once
5
6#include <memory>
7
9
10namespace contur {
11
13 class Semaphore final : public ISyncPrimitive
14 {
15 public:
17 explicit Semaphore(std::size_t initialCount = 1, std::size_t maxCount = 1);
18 ~Semaphore() override;
19
20 Semaphore(const Semaphore &) = delete;
21 Semaphore &operator=(const Semaphore &) = delete;
22 Semaphore(Semaphore &&) noexcept;
23 Semaphore &operator=(Semaphore &&) noexcept;
24
26 [[nodiscard]] Result<void> acquire(ProcessId pid) override;
27
29 [[nodiscard]] Result<void> release(ProcessId pid) override;
30
32 [[nodiscard]] Result<void> tryAcquire(ProcessId pid) override;
33
35 [[nodiscard]] std::string_view name() const noexcept override;
36
38 [[nodiscard]] std::size_t count() const noexcept;
39
41 [[nodiscard]] std::size_t maxCount() const noexcept;
42
44 [[nodiscard]] std::size_t waitingCount() const noexcept;
45
46 private:
47 struct Impl;
48 std::unique_ptr<Impl> impl_;
49 };
50
51} // namespace contur
Common interface for synchronization primitives.
A result type that holds either a success value of type T or an ErrorCode.
Definition error.h:104
Result< void > release(ProcessId pid) override
Releases one semaphore unit.
~Semaphore() override
std::string_view name() const noexcept override
Primitive name for diagnostics.
std::size_t count() const noexcept
Current available count.
Semaphore(std::size_t initialCount=1, std::size_t maxCount=1)
Constructs semaphore with initial and maximum count.
Semaphore(const Semaphore &)=delete
std::unique_ptr< Impl > impl_
Definition semaphore.h:48
Result< void > tryAcquire(ProcessId pid) override
Non-blocking acquire attempt.
Result< void > acquire(ProcessId pid) override
Acquires one semaphore unit.
std::size_t waitingCount() const noexcept
Number of waiting processes.
Semaphore & operator=(const Semaphore &)=delete
Semaphore(Semaphore &&) noexcept
std::size_t maxCount() const noexcept
Configured maximum count.
ISyncPrimitive interface for synchronization objects.
Definition block.h:15
std::uint32_t ProcessId
Unique identifier for a process.
Definition types.h:12