#cell #initialization #static #access #initialized #safe #init

init_cell

一个安全访问、非安全初始化的单元格

1个不稳定发布

0.1.0 2023年9月23日

#5 in #initialized

MIT/Apache

8KB
70

Crates.io

init_cell

一个可以非安全初始化或内部修改,但安全访问的单元格

此库主要用于静态变量。该单元格可以安全访问,但在访问之前必须进行初始化。没有同步机制来确保初始化被观察到,因此应在主函数的开始处或使用类似于ctor的crate进行初始化。

示例

use init_cell::InitCell;

// SAFETY: We will initialize the cell before using it.
pub static MY_VAL: InitCell<Vec<i32>> = unsafe { InitCell::new() };

fn main() {
	// SAFETY: Nothing is accessing the cell.
	unsafe {
		InitCell::init(&MY_VAL, vec![1, 2, 3]);
	}
	assert_eq!(MY_VAL.iter().sum::<i32>(), 6);

	// The cell can be mutated, too, which drops the previous value.
	unsafe {
		InitCell::set(&MY_VAL, vec![4, 5, 6]);
	}
	assert_eq!(MY_VAL.iter().sum::<i32>(), 15);
}

许可协议

许可协议为以下之一

任选其一。

贡献

除非你明确声明,否则根据Apache-2.0许可协议定义,任何有意提交给作品并由你拥有的贡献,将如上所述双重许可,无需任何额外条款或条件。

无运行时依赖