pub struct MutexRegister<T: Copy + Default> { /* private fields */ }Expand description
An shared-memory register, backed by a Mutex.
This object uses a mutex to protect against concurrent memory access. It is not lock-free.
§Examples
A simple spinlock.
use std::sync::Arc;
use std::{hint, thread};
use todc_mem::register::{MutexRegister, Register};
let register: Arc<MutexRegister<bool>> = Arc::new(MutexRegister::new());
let register_clone = register.clone();
let thread = thread::spawn(move || {
register_clone.write(true)
});
while !register.read() {
hint::spin_loop();
}
thread.join().unwrap();It is also possible to store larger, more complicated objects.
use todc_mem::register::{MutexRegister, Register};
#[derive(Clone, Copy, Debug, Default, PartialEq)]
enum MyType {
#[default]
Nothing,
Booleans([bool; 100]),
Numbers([u64; 100]),
}
let register: MutexRegister<MyType> = MutexRegister::new();
assert_eq!(register.read(), MyType::Nothing);
let numbers = MyType::Numbers([42; 100]);
register.write(numbers);
assert_eq!(register.read(), numbers);Trait Implementations§
Source§impl<T: Copy + Default> Register for MutexRegister<T>
impl<T: Copy + Default> Register for MutexRegister<T>
Source§fn new() -> Self
fn new() -> Self
Creates a new register containing the default value of T.
§Examples
use todc_mem::register::{MutexRegister, Register};
let register: MutexRegister<bool> = MutexRegister::new();
assert_eq!(register.read(), bool::default());Source§fn read(&self) -> Self::Value
fn read(&self) -> Self::Value
Returns the value currently contained in the register.
§Examples
use todc_mem::register::{MutexRegister, Register};
let register: MutexRegister<bool> = MutexRegister::new();
assert_eq!(register.read(), false);Source§fn write(&self, value: Self::Value)
fn write(&self, value: Self::Value)
Sets contents of the register to the specified value.
§Examples
use todc_mem::register::{MutexRegister, Register};
let register: MutexRegister<bool> = MutexRegister::new();
register.write(true);
assert_eq!(register.read(), true);type Value = T
Auto Trait Implementations§
impl<T> !Freeze for MutexRegister<T>
impl<T> RefUnwindSafe for MutexRegister<T>
impl<T> Send for MutexRegister<T>where
T: Send,
impl<T> Sync for MutexRegister<T>where
T: Send,
impl<T> Unpin for MutexRegister<T>where
T: Unpin,
impl<T> UnsafeUnpin for MutexRegister<T>where
T: UnsafeUnpin,
impl<T> UnwindSafe for MutexRegister<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more