24 lines
498 B
Rust
24 lines
498 B
Rust
use core::cell::{RefCell, RefMut};
|
|
|
|
/// 只能在单核场景下保持安全的屑RefCell
|
|
struct UnsafeCell<T> {
|
|
inner_cell: RefCell<T>
|
|
}
|
|
|
|
unsafe impl<T> Sync for UnsafeCell<T> {
|
|
|
|
}
|
|
|
|
impl<T> UnsafeCell<T> {
|
|
pub unsafe fn new(value: T) -> UnsafeCell<T> {
|
|
Self {
|
|
inner_cell: RefCell::new(value)
|
|
}
|
|
}
|
|
|
|
/// 独占访问
|
|
/// 当已被借用时访问会Panic
|
|
pub fn exclusive_access(&self) -> RefMut<'_, T> {
|
|
self.inner_cell.borrow_mut()
|
|
}
|
|
} |