在C++中,函数内部定义的静态变量默认是线程安全的。那么,Rust 中的静态变量是否具有相同的线程安全属性,或者我需要使用一些
sync
原语?
在 C++ 中,函数内部定义的静态变量默认是线程安全的。
不,他们不是。只有它们的初始化是线程安全的。
线程安全保证(功能上)与 Rust 的
LazyLock
非常相似。除了 C++ 在幕后做这件事。
那么,Rust 中的静态变量是否具有相同的线程安全属性,或者我需要使用一些
原语?sync
Rust 静态只能通过 const 表达式初始化。并且此类表达式始终在编译时求值。这意味着变量将在运行时甚至开始之前初始化(它将被烘焙到程序集中)。与使用 C++ 可以做的事情相比,这是相当有限的。但另一方面,这样就没有隐藏成本。
如果你想自由地初始化一个静态变量,你需要使用
LazyLock
,这最终会导致与 C++ 所做的相同的事情,除了明确地。
使用当然是另一回事了。而且一旦初始化,C++ 和 Rust 都无法保证底层对象的线程安全。