Rust线程局部存储详解与示例
需积分: 44 48 浏览量
更新于2024-08-07
收藏 3.91MB PDF 举报
"线程局部存储在编程语言如Rust中是一种特性,允许每个线程拥有独立的变量副本,互不干扰,从而无需考虑线程安全问题。Rust提供了两种实现线程局部存储的方式:一种是使用`#[thread_local]`属性,但这在稳定版中尚不支持,需要在nightly版本中启用`#![feature(thread_local)]`;另一种是使用`thread_local!`宏,已在稳定版中得到支持。
以下是一个使用`thread_local!`宏的示例代码:
```rust
use std::cell::RefCell;
use std::thread;
thread_local! {
static FOO: RefCell<u32> = RefCell::new(1)
}
fn main() {
FOO.with(|f| {
println!("main thread value1 {:?}", f.borrow());
*f.borrow_mut() = 2;
println!("main thread value2 {:?}", f.borrow());
});
let t = thread::spawn(move || {
FOO.with(|f| {
println!("child thread value1 {:?}", f.borrow());
*f.borrow_mut() = 3;
println!("child thread value2 {:?}", f.borrow());
});
});
t.join().ok();
FOO.with(|f| {
println!("main thread value3 {:?}", f.borrow());
});
}
```
在这个例子中,`FOO`在主线程和子线程中看起来像是同一个变量,但实际上它们是独立的。主线程修改`FOO`的值不会影响子线程的值,反之亦然。这表明在不同的线程中,`thread_local!`声明的变量实际上是分开存储的,每个线程都有自己的副本。
此外,提到的书籍《深入浅出Rust》是由范长春所著,该书涵盖了Rust的基础知识和内存安全等内容,包括版本管理、变量和类型、函数、trait、数组和字符串、模式解构、类型系统、宏以及内存管理相关的所有权、移动语义、借用和生命周期等重要概念。这本书对于理解Rust编程语言的特性和内存安全机制有着详尽的介绍,适合Rust初学者和进阶者学习使用。
240 浏览量
2018-01-04 上传
184 浏览量
2021-06-30 上传
2024-02-17 上传
2021-04-30 上传
2024-04-21 上传
2021-05-21 上传
点击了解资源详情
张_伟_杰
- 粉丝: 64
- 资源: 3913
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍