contur2
Loading...
Searching...
No Matches
mutex.h
Go to the documentation of this file.
1
3
4#pragma once
5
6#include <memory>
7#include <optional>
8
10
11namespace contur {
12
14 class Mutex final : public ISyncPrimitive
15 {
16 public:
19 ~Mutex() override;
20
21 Mutex(const Mutex &) = delete;
22 Mutex &operator=(const Mutex &) = delete;
23 Mutex(Mutex &&) noexcept;
24 Mutex &operator=(Mutex &&) noexcept;
25
28 [[nodiscard]] Result<void> acquire(ProcessId pid) override;
29
32 [[nodiscard]] Result<void> release(ProcessId pid) override;
33
35 [[nodiscard]] Result<void> tryAcquire(ProcessId pid) override;
36
38 [[nodiscard]] std::string_view name() const noexcept override;
39
41 [[nodiscard]] bool isLocked() const noexcept;
42
44 [[nodiscard]] std::optional<ProcessId> owner() const noexcept;
45
47 [[nodiscard]] std::size_t recursionDepth() const noexcept;
48
50 [[nodiscard]] std::size_t waitingCount() const noexcept;
51
52 private:
53 struct Impl;
54 std::unique_ptr<Impl> impl_;
55 };
56
57} // namespace contur
Common interface for synchronization primitives.
Mutex(const Mutex &)=delete
Mutex(Mutex &&) noexcept
bool isLocked() const noexcept
True when the mutex is owned by some process.
std::unique_ptr< Impl > impl_
Definition mutex.h:54
Mutex & operator=(const Mutex &)=delete
Mutex()
Constructs an unlocked mutex.
~Mutex() override
std::size_t recursionDepth() const noexcept
Reentrancy depth for owner.
Result< void > tryAcquire(ProcessId pid) override
Attempts immediate acquire without enqueueing waiters.
std::string_view name() const noexcept override
Primitive name for diagnostics.
std::optional< ProcessId > owner() const noexcept
Current owner process ID, if locked.
std::size_t waitingCount() const noexcept
Number of waiting processes.
Result< void > acquire(ProcessId pid) override
Acquires the mutex for process pid.
Result< void > release(ProcessId pid) override
Releases the mutex held by process pid.
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