]>
Commit | Line | Data |
---|---|---|
e74abb32 XL |
1 | use super::mutex::Mutex; |
2 | ||
3 | pub struct RWLock { | |
60c5eb7d | 4 | mutex: Mutex, |
e74abb32 XL |
5 | } |
6 | ||
7 | unsafe impl Send for RWLock {} | |
8 | unsafe impl Sync for RWLock {} | |
9 | ||
10 | impl RWLock { | |
11 | pub const fn new() -> RWLock { | |
60c5eb7d | 12 | RWLock { mutex: Mutex::new() } |
e74abb32 XL |
13 | } |
14 | ||
15 | #[inline] | |
16 | pub unsafe fn read(&self) { | |
17 | self.mutex.lock(); | |
18 | } | |
19 | ||
20 | #[inline] | |
21 | pub unsafe fn try_read(&self) -> bool { | |
22 | self.mutex.try_lock() | |
23 | } | |
24 | ||
25 | #[inline] | |
26 | pub unsafe fn write(&self) { | |
27 | self.mutex.lock(); | |
28 | } | |
29 | ||
30 | #[inline] | |
31 | pub unsafe fn try_write(&self) -> bool { | |
32 | self.mutex.try_lock() | |
33 | } | |
34 | ||
35 | #[inline] | |
36 | pub unsafe fn read_unlock(&self) { | |
37 | self.mutex.unlock(); | |
38 | } | |
39 | ||
40 | #[inline] | |
41 | pub unsafe fn write_unlock(&self) { | |
42 | self.mutex.unlock(); | |
43 | } | |
44 | ||
45 | #[inline] | |
46 | pub unsafe fn destroy(&self) { | |
47 | self.mutex.destroy(); | |
48 | } | |
49 | } |