Iros
 
Loading...
Searching...
No Matches
scoped_lock.h
Go to the documentation of this file.
1#pragma once
2
5
6namespace di::sync {
7template<concepts::Lock... Locks>
8class ScopedLock {
9public:
10 constexpr explicit ScopedLock(Locks&... locks) : m_locks(locks...) {
11 // FIXME: this should use a deadlock avoidance algorithm (lock in order of lock addresses).
13 [](concepts::Lock auto& lock) {
14 lock.lock();
15 },
16 m_locks);
17 }
18
19 ScopedLock(ScopedLock const&) = delete;
20 auto operator=(ScopedLock const&) -> ScopedLock& = delete;
21
22 constexpr ~ScopedLock() {
24 [](concepts::Lock auto& lock) {
25 lock.unlock();
26 },
27 m_locks);
28 }
29
30private:
31 Tuple<Locks&...> m_locks;
32};
33}
34
35namespace di {
36using sync::ScopedLock;
37}
ScopedLock(ScopedLock const &)=delete
auto operator=(ScopedLock const &) -> ScopedLock &=delete
constexpr ~ScopedLock()
Definition scoped_lock.h:22
constexpr ScopedLock(Locks &... locks)
Definition scoped_lock.h:10
Definition tuple_forward_declaration.h:5
Definition lock.h:8
Definition atomic.h:12
Definition zstring_parser.h:9
constexpr void tuple_for_each(F &&function, Tup &&tuple)
Definition tuple_for_each.h:22