]>
git.proxmox.com Git - ceph.git/blob - ceph/src/common/fair_mutex.h
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:nil -*-
5 #include "common/ceph_mutex.h"
14 fair_mutex(const std::string
& name
)
15 : mutex
{ceph::make_mutex(name
)}
17 ~fair_mutex() = default;
18 fair_mutex(const fair_mutex
&) = delete;
19 fair_mutex
& operator=(const fair_mutex
&) = delete;
23 std::unique_lock
lock(mutex
);
24 const unsigned my_id
= next_id
++;
26 return my_id
== unblock_id
;
33 std::lock_guard
lock(mutex
);
44 std::lock_guard
lock(mutex
);
50 bool is_locked() const
52 return next_id
!= unblock_id
;
55 #ifdef CEPH_DEBUG_MUTEX
56 bool is_locked_by_me() const {
57 return is_locked() && locked_by
== std::this_thread::get_id();
60 void _set_locked_by() {
61 locked_by
= std::this_thread::get_id();
63 void _reset_locked_by() {
67 void _set_locked_by() {}
68 void _reset_locked_by() {}
73 unsigned unblock_id
= 0;
74 ceph::condition_variable cond
;
76 #ifdef CEPH_DEBUG_MUTEX
77 std::thread::id locked_by
= {};