GLOBAL_LOG_BUFFER

Static GLOBAL_LOG_BUFFER 

Source
static GLOBAL_LOG_BUFFER: GlobalLogBuffer
Expand description

全局日志缓冲区实例

我们不需要锁 (如 Mutex) 或延迟初始化 (如 OnceCell),因为:

1.  不需要 Mutex (锁): GlobalLogBuffer 本身是线程安全的。  它使用 AtomicUsize 字段以内部可变性设计。  由于其所有方法 (write, read) 都对共享引用 (&self) 操作,  并且所有内部修改都通过原子操作安全处理,因此整个  结构体是 Sync。我们不需要将一个已经线程安全的  类型封装在另一个锁中。

2.  不需要 LazyOnceCell: GlobalLogBuffer::new()  函数是一个 const fn。这意味着它在编译时执行,  而不是在运行时执行。整个、完全初始化的 GlobalLogBuffer  实例在内核编译时被直接烘焙到内核的数据段 (.data.bss) 中。

 因此,没有运行时初始化步骤,也就不存在 Lazy 旨在解决的  “首次初始化“竞态条件。缓冲区从第一条 CPU 指令开始,  就已完全初始化并存在于内存中。

这种模式产生了零开销、锁无关且无数据竞争的 全局静态实例。