]> git.lizzy.rs Git - rust.git/blob - src/libstd/sys/windows/rwlock.rs
Ensure `record_layout_for_printing()` is inlined.
[rust.git] / src / libstd / sys / windows / rwlock.rs
1 use cell::UnsafeCell;
2 use sys::c;
3
4 pub struct RWLock { inner: UnsafeCell<c::SRWLOCK> }
5
6 unsafe impl Send for RWLock {}
7 unsafe impl Sync for RWLock {}
8
9 impl RWLock {
10     pub const fn new() -> RWLock {
11         RWLock { inner: UnsafeCell::new(c::SRWLOCK_INIT) }
12     }
13     #[inline]
14     pub unsafe fn read(&self) {
15         c::AcquireSRWLockShared(self.inner.get())
16     }
17     #[inline]
18     pub unsafe fn try_read(&self) -> bool {
19         c::TryAcquireSRWLockShared(self.inner.get()) != 0
20     }
21     #[inline]
22     pub unsafe fn write(&self) {
23         c::AcquireSRWLockExclusive(self.inner.get())
24     }
25     #[inline]
26     pub unsafe fn try_write(&self) -> bool {
27         c::TryAcquireSRWLockExclusive(self.inner.get()) != 0
28     }
29     #[inline]
30     pub unsafe fn read_unlock(&self) {
31         c::ReleaseSRWLockShared(self.inner.get())
32     }
33     #[inline]
34     pub unsafe fn write_unlock(&self) {
35         c::ReleaseSRWLockExclusive(self.inner.get())
36     }
37
38     #[inline]
39     pub unsafe fn destroy(&self) {
40         // ...
41     }
42 }