contur2
Loading...
Searching...
No Matches
critical_section.h
Go to the documentation of this file.
1
3
4#pragma once
5
6#include <memory>
7
9
10namespace contur {
11
13 class CriticalSection final : public ISyncPrimitive
14 {
15 public:
18 explicit CriticalSection(std::unique_ptr<ISyncPrimitive> primitive = nullptr);
19 ~CriticalSection() override;
20
24 CriticalSection &operator=(CriticalSection &&) noexcept;
25
27 [[nodiscard]] Result<void> acquire(ProcessId pid) override;
28
30 [[nodiscard]] Result<void> release(ProcessId pid) override;
31
33 [[nodiscard]] Result<void> tryAcquire(ProcessId pid) override;
34
36 [[nodiscard]] std::string_view name() const noexcept override;
37
39 [[nodiscard]] Result<void> enter(ProcessId pid);
40
42 [[nodiscard]] Result<void> leave(ProcessId pid);
43
45 [[nodiscard]] Result<void> tryEnter(ProcessId pid);
46
47 private:
48 struct Impl;
49 std::unique_ptr<Impl> impl_;
50 };
51
52} // namespace contur
std::string_view name() const noexcept override
Primitive name for diagnostics.
Result< void > tryEnter(ProcessId pid)
Alias for tryAcquire().
CriticalSection(std::unique_ptr< ISyncPrimitive > primitive=nullptr)
Constructs a critical section using provided primitive.
Result< void > tryAcquire(ProcessId pid) override
Non-blocking acquire on underlying primitive.
Result< void > release(ProcessId pid) override
Releases underlying primitive.
Result< void > acquire(ProcessId pid) override
Acquires underlying primitive.
CriticalSection(CriticalSection &&) noexcept
std::unique_ptr< Impl > impl_
CriticalSection & operator=(const CriticalSection &)=delete
Result< void > leave(ProcessId pid)
Alias for release().
CriticalSection(const CriticalSection &)=delete
Result< void > enter(ProcessId pid)
Alias for acquire().
Common interface for synchronization primitives.
A result type that holds either a success value of type T or an ErrorCode.
Definition error.h:104
ISyncPrimitive interface for synchronization objects.
Definition block.h:15
std::uint32_t ProcessId
Unique identifier for a process.
Definition types.h:12