面试题答案
一键面试基本原理
Rust 的线程停放机制允许线程暂停执行并在稍后恢复,这在需要控制线程执行流程,如减少不必要的 CPU 占用等场景中很有用。其核心基于 park
和 unpark
操作,park
使线程进入等待状态,unpark
则唤醒等待的线程。
主要结构体
thread::parking_lot::Parker
这是线程停放机制中的关键结构体,它负责管理线程的停放和唤醒。Parker
内部维护了一个状态,用于跟踪线程是否已被unpark
。
主要方法
park
- 定义在
Parker
结构体上,调用park
方法会使当前线程进入等待状态,暂停执行。线程会等待被unpark
操作唤醒。 - 例如:
- 定义在
use std::thread::parking_lot::Parker;
let parker = Parker::new();
parker.park();
unpark
- 同样定义在
Parker
结构体上,调用unpark
方法会唤醒之前通过park
进入等待状态的线程。如果线程还未park
,unpark
操作会使Parker
记录下这个 “唤醒信号”,当线程随后调用park
时,它会立即被唤醒,而不会真正进入等待状态。 - 例如:
- 同样定义在
use std::thread::parking_lot::Parker;
let parker = Parker::new();
parker.unpark();
parker.park(); // 此调用不会使线程进入等待,因为之前已 unpark