contur2
Loading...
Searching...
No Matches
deadlock_detector.h
Go to the documentation of this file.
1
3
4#pragma once
5
6#include <cstdint>
7#include <memory>
8#include <vector>
9
10#include "contur/core/types.h"
11
12namespace contur {
13
16 {
20 std::vector<std::uint32_t> resources;
21 };
22
28 {
29 public:
32
36 DeadlockDetector &operator=(DeadlockDetector &&) noexcept;
37
41 void onAcquire(ProcessId pid, ResourceId resource);
42
46 void onRelease(ProcessId pid, ResourceId resource);
47
51 void onWait(ProcessId pid, ResourceId resource);
52
54 [[nodiscard]] bool hasDeadlock() const;
55
57 [[nodiscard]] std::vector<ProcessId> getDeadlockedProcesses() const;
58
64 [[nodiscard]] bool isSafeState(
65 const std::vector<ResourceAllocation> &current,
66 const std::vector<ResourceAllocation> &maximum,
67 const std::vector<std::uint32_t> &available
68 ) const;
69
70 private:
71 struct Impl;
72 std::unique_ptr<Impl> impl_;
73 };
74
75} // namespace contur
DeadlockDetector & operator=(const DeadlockDetector &)=delete
DeadlockDetector(DeadlockDetector &&) noexcept
DeadlockDetector(const DeadlockDetector &)=delete
bool hasDeadlock() const
Returns true if the current wait-for graph has a cycle.
void onAcquire(ProcessId pid, ResourceId resource)
Records successful acquisition of a resource by a process.
std::vector< ProcessId > getDeadlockedProcesses() const
Returns process IDs involved in deadlock cycles.
void onWait(ProcessId pid, ResourceId resource)
Records waiting on a resource and updates wait-for graph.
void onRelease(ProcessId pid, ResourceId resource)
Records release of a resource by a process.
bool isSafeState(const std::vector< ResourceAllocation > &current, const std::vector< ResourceAllocation > &maximum, const std::vector< std::uint32_t > &available) const
Banker's algorithm safety check.
std::unique_ptr< Impl > impl_
Definition block.h:15
std::uint32_t ProcessId
Unique identifier for a process.
Definition types.h:12
std::uint32_t ResourceId
Unique identifier for a synchronization resource (mutex, semaphore, etc.).
Definition types.h:30
constexpr ProcessId INVALID_PID
Sentinel value indicating an invalid/unassigned process ID.
Definition types.h:46
Per-process resource vector used by Banker's safety check.
ProcessId pid
Process identifier for this allocation row.
std::vector< std::uint32_t > resources
Resource vector indexed by resource type.
Common type aliases, sentinel constants, and forward declarations used throughout the Contur 2 kernel...