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

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

有时候我们我们需要将当前的线程暂停一段时间,可能是某些条件不满足,比如实现spinlock,或者是想定时执行某些业务,如cron类的程序,这个时候我们可以调用 thread::sleep 函数。
上面的例子中,我们创建了两个线程,一个线程睡眠 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
《Rust 并发编程实战课》,新⼈⾸单¥98
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论