]>
Commit | Line | Data |
---|---|---|
e74abb32 | 1 | use crate::ffi::c_void; |
60c5eb7d | 2 | use crate::ptr; |
e74abb32 XL |
3 | use crate::sys::hermit::abi; |
4 | ||
5 | pub struct Mutex { | |
60c5eb7d | 6 | inner: *const c_void, |
e74abb32 XL |
7 | } |
8 | ||
9 | unsafe impl Send for Mutex {} | |
10 | unsafe impl Sync for Mutex {} | |
11 | ||
12 | impl Mutex { | |
13 | pub const fn new() -> Mutex { | |
14 | Mutex { inner: ptr::null() } | |
15 | } | |
16 | ||
17 | #[inline] | |
18 | pub unsafe fn init(&mut self) { | |
19 | let _ = abi::sem_init(&mut self.inner as *mut *const c_void, 1); | |
20 | } | |
21 | ||
22 | #[inline] | |
23 | pub unsafe fn lock(&self) { | |
24 | let _ = abi::sem_timedwait(self.inner, 0); | |
25 | } | |
26 | ||
27 | #[inline] | |
28 | pub unsafe fn unlock(&self) { | |
29 | let _ = abi::sem_post(self.inner); | |
30 | } | |
31 | ||
32 | #[inline] | |
33 | pub unsafe fn try_lock(&self) -> bool { | |
34 | let result = abi::sem_trywait(self.inner); | |
35 | result == 0 | |
36 | } | |
37 | ||
38 | #[inline] | |
39 | pub unsafe fn destroy(&self) { | |
40 | let _ = abi::sem_destroy(self.inner); | |
41 | } | |
42 | } | |
43 | ||
44 | pub struct ReentrantMutex { | |
60c5eb7d | 45 | inner: *const c_void, |
e74abb32 XL |
46 | } |
47 | ||
48 | impl ReentrantMutex { | |
49 | pub unsafe fn uninitialized() -> ReentrantMutex { | |
50 | ReentrantMutex { inner: ptr::null() } | |
51 | } | |
52 | ||
53 | #[inline] | |
54 | pub unsafe fn init(&mut self) { | |
55 | let _ = abi::recmutex_init(&mut self.inner as *mut *const c_void); | |
56 | } | |
57 | ||
58 | #[inline] | |
59 | pub unsafe fn lock(&self) { | |
60 | let _ = abi::recmutex_lock(self.inner); | |
61 | } | |
62 | ||
63 | #[inline] | |
64 | pub unsafe fn try_lock(&self) -> bool { | |
65 | true | |
66 | } | |
67 | ||
68 | #[inline] | |
69 | pub unsafe fn unlock(&self) { | |
70 | let _ = abi::recmutex_unlock(self.inner); | |
71 | } | |
72 | ||
73 | #[inline] | |
74 | pub unsafe fn destroy(&self) { | |
75 | let _ = abi::recmutex_destroy(self.inner); | |
76 | } | |
77 | } |