Function std::thread::panicking

1.0.0 · source ·
pub fn panicking() -> bool
Expand description

确定当前线程是否由于 panic 而处于展开状态。

此特性的一个常见用途是在编写不安全代码时毒害共享资源,方法是在调用 drop 时检查 panic

编写安全代码时通常不需要这样做,因为当线程在持有锁时 panic,Mutex 已经中毒了。

这也可以在多线程应用程序中使用,以便向其他线程发送消息,警告某个线程已发生 panic (例如,出于监视目的)。

Examples

use std::thread;

struct SomeStruct;

impl Drop for SomeStruct {
    fn drop(&mut self) {
        if thread::panicking() {
            println!("dropped while unwinding");
        } else {
            println!("dropped while not unwinding");
        }
    }
}

{
    print!("a: ");
    let a = SomeStruct;
}

{
    print!("b: ");
    let b = SomeStruct;
    panic!()
}
Run