ax-lazyinit
路径:
components/ax-lazyinit类型:库 crate 分层:组件层 / 一次性初始化基础件 版本:0.4.2文档依据:Cargo.toml、README.md、src/lib.rs
ax-lazyinit 提供一个面向静态对象的一次性初始化容器 LazyInit<T>。它以 AtomicU8 + UnsafeCell<MaybeUninit<T>> 实现无分配、可并发争用的“只初始化一次”语义。它属于运行时叶子基础件:不是资源生命周期框架、不是依赖注入容器,也不是带阻塞唤醒机制的完整 OnceCell 替代品。
架构设计
设计定位
ArceOS/StarryOS/Axvisor 的很多全局对象都不能在编译期直接构造:
- 平台设备要等 MMIO 基址探测完才能创建。
- 运行时队列、地址空间、网络状态要等初始化流程走到相应阶段才能建立。
- 又因为很多路径处于
no_std和早期启动阶段,不能依赖重型同步原语。
ax-lazyinit 正是在这个背景下提供一个极小的“一次建好,之后只读/少量可变访问”的容器。
1.2 核心类型与状态机
LazyInit<T>:主体类型,内部持有初始化状态和未初始化存储。UNINIT/INITIALIZING/INITED:三态状态机。
其状态流转很简单: