乱读天书, 不求甚解
周祎骏的个人云笔记
Toggle navigation
乱读天书, 不求甚解
主页
Linux:系统配置
Linux:用户管理
Linux:优化排错
Linux:进程调度
Linux:文件系统
Linux:网络
Linux:系统服务
Linux:安全
Linux:内核
容器:Docker
容器:containerd
容器编排:Kubernetes
IAC:Terraform
大数据:Hadoop
大数据:Zookeeper
大数据:Hbase
消息队列:rsyslog
消息队列:kafka
数据库:MySQL
数据库:MongoDB
搜索引擎:Elasticsearch
时序数据库:OpenTSDB
网站服务:Nginx
编程:Bash
编程:Perl
编程:Python
编程:C
编程:JAVA
编程:Rust
版本控制:gitlab
知识管理:docusaurus
常用小工具
关于我
标签
Rust 08.00 多线程
2023-02-05 10:10:59
34
0
0
admin
> 多线程功能 ## 通过闭包将线程的代码传给spawn ```rust use std::thread; fn main() { let handle = thread::spawn(|| { println!("123"); }); handle.join(); //阻塞当前线程,直到新线程运行结束 } ``` *** ## 用move 使新线程获得变量所有权 ```rust use std::thread; fn main() { let v = vec![1,2,3]; let handle = thread::spawn(move || { println!("{:?}",v); }); handle.join(); } ``` *** ## 使用channel 在线程之间传递消息 ```rust use std::thread; use std::sync::mpsc; fn main() { let (tx,rx) = mpsc::channel(); let handle = thread::spawn(move || { tx.send("lala"); }); let received = rx.recv();//阻塞线程等消息 //try_recv 不会阻塞 println!("{:?}",received); } ``` 克隆多个消息生产者 ```rust use std::thread; use std::sync::mpsc; fn main() { let (tx,rx) = mpsc::channel(); let tx2 = mpsc::Sender::clone(&tx); thread::spawn(move || { tx.send("lala"); }); thread::spawn(move || { tx2.send("haha"); }); for received in rx { println!("{:?}",received); } } ``` > 满足了Send trait 的类型才能在线程间转移所有权 满足了Sync trait 的类型才能被多个线程引用 几乎所有类型都满足了这些 完全由满足Send 和 Sync 的类型组成的复合类型会自动标记为满足Send 和 Sync(裸指针不满足) 不鼓励手动实现Send 和 Sync
上一篇:
Rust 07.03 智能指针RefCell
下一篇:
Rust 08.01 多线程通过互斥锁指针Mutex和原子计数指针Arc来共享数据
文档导航