parking_lot/raw_fair_mutex.rs
1use crate::raw_mutex::RawMutex;
2use lock_api::RawMutexFair;
3
4/// Raw fair mutex type backed by the parking lot.
5pub struct RawFairMutex(RawMutex);
6
7unsafe impl lock_api::RawMutex for RawFairMutex {
8 const INIT: Self = RawFairMutex(<RawMutex as lock_api::RawMutex>::INIT);
9
10 type Guard = <RawMutex as lock_api::RawMutex>::Guard;
11
12 #[inline]
13 fn lock(&self) -> Self::Guard {
14 self.0.lock()
15 }
16
17 #[inline]
18 fn try_lock(&self) -> Option<Self::Guard> {
19 self.0.try_lock()
20 }
21
22 #[inline]
23 unsafe fn unlock(&self, guard: Self::Guard) {
24 unsafe { self.unlock_fair(guard) }
25 }
26
27 #[inline]
28 fn is_locked(&self) -> bool {
29 self.0.is_locked()
30 }
31}
32
33unsafe impl lock_api::RawMutexFair for RawFairMutex {
34 #[inline]
35 unsafe fn unlock_fair(&self, guard: Self::Guard) {
36 unsafe { self.0.unlock_fair(guard) }
37 }
38
39 #[inline]
40 unsafe fn bump(&self, guard: &mut Self::Guard) {
41 unsafe { self.0.bump(guard) }
42 }
43}
44
45unsafe impl lock_api::RawMutexTimed for RawFairMutex {
46 type Duration = <RawMutex as lock_api::RawMutexTimed>::Duration;
47 type Instant = <RawMutex as lock_api::RawMutexTimed>::Instant;
48
49 #[inline]
50 fn try_lock_until(&self, timeout: Self::Instant) -> Option<Self::Guard> {
51 self.0.try_lock_until(timeout)
52 }
53
54 #[inline]
55 fn try_lock_for(&self, timeout: Self::Duration) -> Option<Self::Guard> {
56 self.0.try_lock_for(timeout)
57 }
58}