Rust 并发编程实战课
晁岳攀(鸟窝)
前微博技术专家,知名微服务框架 rpcx 作者
405 人已学习
新⼈⾸单¥98
Rust 并发编程实战课
15
15
1.0x
00:00/00:00
登录|注册

06|沉睡待机,应声而起:线程的挂起和唤醒

你好,我是鸟窝。
上节课我们学习了如何在 Rust 中管理线程,包括获取线程信息、控制并发度、设置优先级以及绑定 CPU 核心,这一节课,我们来看看如何让一个线程挂起和唤醒。

sleep:累了,我想躺平一会

有时候我们我们需要将当前的线程暂停一段时间,可能是某些条件不满足,比如实现spinlock,或者是想定时执行某些业务,如cron类的程序,这个时候我们可以调用  thread::sleep  函数。
use std::thread;
use std::time::Duration;
fn main() {
let handle1 = thread::spawn(|| {
thread::sleep(Duration::from_millis(2000));
println!("Hello from a thread1!");
});
let handle2 = thread::spawn(|| {
thread::sleep(Duration::from_millis(1000));
println!("Hello from a thread2!");
});
handle1.join().unwrap();
handle2.join().unwrap();
}
上面的例子中,我们创建了两个线程,一个线程睡眠 2 秒,另一个线程睡眠 1 秒。这样,我们就可以在 Rust 中暂停线程了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. Rust中的线程操作函数包括`thread::sleep`、`yield_now()`、`park`和`unpark`,分别用于线程暂停、协作式调度、线程挂起和唤醒。 2. 使用`parking` crate提供的`Parker`和`Unparker`对象可以实现更灵活的线程挂起和唤醒操作,避免死锁问题。 3. `Parker`对象提供了`park`、`park_timeout`、`park_deadline`等方法,而`Unparker`对象提供了`unpark`、`same_parker`、`will_unpark`等方法,用于线程管理和同步操作。 4. `park`/`unpark` 在 Rust 并发编程中主要用于线程间的同步和协调,特别是在需要细粒度控制线程阻塞和唤醒的场景下。 5. `park`/`unpark` 的典型使用场景包括手动实现同步原语、构建自定义的并发数据结构、实现特定的线程协调逻辑。 6. 具体使用 `park`/`unpark` 实现的场景包括阻塞队列、Future 和异步任务的调度、生产者-消费者模式等。 7. `sleep`、`park`/`unpark` 和 `yield_now` 分别用于线程休眠、线程同步和协作式调度,是 Rust 中控制线程挂起和唤醒的三种方法。 8. `sleep` 是定时休息,`park/unpark` 是等待信号,`yield_now` 是礼貌让路,分别代表了不同的线程操作方式。 9. 思考题包括使用sleep控制线程每分钟打印一句话,以及使用park/unpark自己实现BlockingQueue。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 并发编程实战课》
新⼈⾸单¥98
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)