OnceCell和OnceLock

pull/1274/head
sd44 1 year ago
parent 5c511c36e8
commit 1bd9613579

@ -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<Logger> = SyncOnceCell::new();
// Rust 1.70版本以上
// static LOGGER: OnceLock<Logger> = OnceLock::new();
impl Logger {
fn global() -> &'static Logger {
// 获取或初始化 Logger

Loading…
Cancel
Save