implement clone on the sync primitives
This commit is contained in:
parent
765598c80c
commit
f3e31d869a
@ -77,6 +77,14 @@ impl Default for Lock {
|
|||||||
Lock::new()
|
Lock::new()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
impl Clone for Lock {
|
||||||
|
fn clone(&self) -> Self {
|
||||||
|
Lock {
|
||||||
|
locked: AtomicBool::new(self.locked.load(Ordering::SeqCst)),
|
||||||
|
lock_strategy: UnsafeCell::new(self.lock_strategy()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
unsafe impl Sync for Lock {}
|
unsafe impl Sync for Lock {}
|
||||||
|
|
||||||
pub struct LockGuard<'l> {
|
pub struct LockGuard<'l> {
|
||||||
|
@ -42,6 +42,12 @@ impl<T> Mutex<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
unsafe impl<T> Sync for Mutex<T> where T: Send {}
|
unsafe impl<T> Sync for Mutex<T> where T: Send {}
|
||||||
|
impl<T> Clone for Mutex<T> where T: Clone {
|
||||||
|
fn clone(&self) -> Self {
|
||||||
|
let value: T = self.lock_spinning().as_ref().clone();
|
||||||
|
Mutex::new(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct MutexGuard<'m, T> {
|
pub struct MutexGuard<'m, T> {
|
||||||
pub mutex: &'m Mutex<T>,
|
pub mutex: &'m Mutex<T>,
|
||||||
|
@ -34,6 +34,13 @@ impl Sleeplock {
|
|||||||
wakeup(addr_of!(*self).cast_mut().cast());
|
wakeup(addr_of!(*self).cast_mut().cast());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
impl Clone for Sleeplock {
|
||||||
|
fn clone(&self) -> Self {
|
||||||
|
Sleeplock {
|
||||||
|
locked: AtomicBool::new(self.locked.load(Ordering::SeqCst)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct SleeplockGuard<'l> {
|
pub struct SleeplockGuard<'l> {
|
||||||
pub lock: &'l Sleeplock,
|
pub lock: &'l Sleeplock,
|
||||||
|
@ -42,6 +42,13 @@ impl Spinlock {
|
|||||||
pop_intr_off();
|
pop_intr_off();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
impl Clone for Spinlock {
|
||||||
|
fn clone(&self) -> Self {
|
||||||
|
Spinlock {
|
||||||
|
locked: AtomicBool::new(self.locked.load(Ordering::SeqCst)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct SpinlockGuard<'l> {
|
pub struct SpinlockGuard<'l> {
|
||||||
pub lock: &'l Spinlock,
|
pub lock: &'l Spinlock,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user