diff --git a/src/advance/global-variable.md b/src/advance/global-variable.md index 66492d87..a67f8ea8 100644 --- a/src/advance/global-variable.md +++ b/src/advance/global-variable.md @@ -315,13 +315,21 @@ fn main() { ## 标准库中的 OnceCell -在 `Rust` 标准库中提供 `lazy::OnceCell` 和 `lazy::SyncOnceCell` 两种 `Cell`,前者用于单线程,后者用于多线程,它们用来存储堆上的信息,并且具有最多只能赋值一次的特性。 如实现一个多线程的日志组件 `Logger`: +在 `Rust` 标准库中提供 `lazy::OnceCell` 和 `lazy::SyncOnceCell` (在 `Rust` +1.70.0版本及以上的标准库中,更改为 `cell::OnceCell` 和 `sync::OnceLock` )两种 +`Cell` ,前者用于单线程,后者用于多线程,它们用来存储堆上的信息,并且具有最 +多只能赋值一次的特性。 如实现一个多线程的日志组件 `Logger`: + ```rust +// 低于Rust 1.70版本 #![feature(once_cell)] use std::{lazy::SyncOnceCell, thread}; +// Rust 1.70版本以上 +// use std::{sync::OnceLock, thread}; + fn main() { // 子线程中调用 let handle = thread::spawn(|| { @@ -342,8 +350,12 @@ fn main() { #[derive(Debug)] struct Logger; +// 低于Rust 1.70版本 static LOGGER: SyncOnceCell = SyncOnceCell::new(); +// Rust 1.70版本以上 +// static LOGGER: OnceLock = OnceLock::new(); + impl Logger { fn global() -> &'static Logger { // 获取或初始化 Logger