Rust标准库中的一次性(Once)

Rust标准库中的一次性(Once)

https://doc.rust-lang.org/std/sync/struct.Once.html

一个同步原语,可用于运行一次性全局初始化。用于FFI或相关功能的一次性初始化。这种类型只能用 Once:::new 构造函数构造。

call_once 方法

执行初始化例程一次,并且只执行一次。如果这是 call_once 第一次被调用,给定的闭包将被执行,否则不会调用该例程。

如果当前有另一个初始化例程正在运行,该方法将阻止调用的线程。

当这个函数返回时,保证一些初始化已经运行并完成(可能不是指定的闭包)。它还保证由执行的闭包所执行的任何内存写入都能被其他线程在这时可靠地观察到(闭包和返回后执行的代码之间存在着发生前的关系)。

如果给定的闭包在同一个 Once 实例上递归调用 call_once,则没有指定确切的行为,允许的结果是恐慌或死锁。