函数内部的静态变量定义是线程安全的

问题描述 投票:0回答:1

在C++中,函数内部定义的静态变量默认是线程安全的。那么,Rust 中的静态变量是否具有相同的线程安全属性,或者我需要使用一些

sync
原语?

rust
1个回答
0
投票

在 C++ 中,函数内部定义的静态变量默认是线程安全的。

不,他们不是。只有它们的初始化是线程安全的。

线程安全保证(功能上)与 Rust 的

LazyLock
非常相似。除了 C++ 在幕后做这件事。

那么,Rust 中的静态变量是否具有相同的线程安全属性,或者我需要使用一些

sync
原语?

Rust 静态只能通过 const 表达式初始化。并且此类表达式始终在编译时求值。这意味着变量将在运行时甚至开始之前初始化(它将被烘焙到程序集中)。与使用 C++ 可以做的事情相比,这是相当有限的。但另一方面,这样就没有隐藏成本。

如果你想自由地初始化一个静态变量,你需要使用

LazyLock
,这最终会导致与 C++ 所做的相同的事情,除了明确地。

使用当然是另一回事了。而且一旦初始化,C++ 和 Rust 都无法保证底层对象的线程安全。

© www.soinside.com 2019 - 2024. All rights reserved.