Contur 2
Educational OS kernel simulator
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
21 ~CriticalSection() override;
22
25
30
32 CriticalSection &operator=(CriticalSection &&) noexcept;
33
35 [[nodiscard]] Result<void> acquire(ProcessId pid) override;
36
38 [[nodiscard]] Result<void> release(ProcessId pid) override;
39
41 [[nodiscard]] Result<void> tryAcquire(ProcessId pid) override;
42
44 [[nodiscard]] std::string_view name() const noexcept override;
45
47 [[nodiscard]] SyncLayer layer() const noexcept override;
48
50 [[nodiscard]] Result<void> enter(ProcessId pid);
51
53 [[nodiscard]] Result<void> leave(ProcessId pid);
54
56 [[nodiscard]] Result<void> tryEnter(ProcessId pid);
57
58 private:
59 struct Impl;
60 std::unique_ptr<Impl> impl_;
61 };
62
63} // 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
Move-constructs critical section state.
~CriticalSection() override
Destroys critical-section adapter.
std::unique_ptr< Impl > impl_
CriticalSection & operator=(const CriticalSection &)=delete
Copy assignment is disabled.
Result< void > leave(ProcessId pid)
Alias for release().
CriticalSection(const CriticalSection &)=delete
Copy construction is disabled.
Result< void > enter(ProcessId pid)
Alias for acquire().
SyncLayer layer() const noexcept override
Layer classification forwarded from underlying primitive.
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
SyncLayer
Distinguishes simulated sync resources from kernel-internal locks.