Struct std::sync::PoisonError1.0.0[][src]

pub struct PoisonError<T> { /* fields omitted */ }
Expand description

一种错误类型,每当获取锁时都可以返回该错误。

每当持有锁的线程发生故障时,MutexRwLock 都会中毒。 锁中毒的确切语义记录在每个锁上,但是一旦锁中毒,则所有 future 获取都将返回此错误。

Examples

use std::sync::{Arc, Mutex};
use std::thread;

let mutex = Arc::new(Mutex::new(1));

// 互斥锁中毒
let c_mutex = Arc::clone(&mutex);
let _ = thread::spawn(move || {
    let mut data = c_mutex.lock().unwrap();
    *data = 2;
    panic!();
}).join();

match mutex.lock() {
    Ok(_) => unreachable!(),
    Err(p_err) => {
        let data = p_err.get_ref();
        println!("recovered: {}", data);
    }
};
Run

Implementations

创建一个 PoisonError

这通常是由 Mutex::lockRwLock::read 之类的方法创建的。

消耗此错误,表明锁已中毒,无论如何都将返回底层防护以允许访问。

Examples

use std::collections::HashSet;
use std::sync::{Arc, Mutex};
use std::thread;

let mutex = Arc::new(Mutex::new(HashSet::new()));

// 互斥锁中毒
let c_mutex = Arc::clone(&mutex);
let _ = thread::spawn(move || {
    let mut data = c_mutex.lock().unwrap();
    data.insert(10);
    panic!();
}).join();

let p_err = mutex.lock().unwrap_err();
let data = p_err.into_inner();
println!("recovered {} items", data.len());
Run

到达此错误指示锁定已中毒,并向基础防护返回引用,无论如何允许访问。

达到此错误指示锁定已中毒,将变量引用返回给底层防护以允许访问。

Trait Implementations

使用给定的格式化程序格式化该值。 Read more

使用给定的格式化程序格式化该值。 Read more

👎 Deprecated since 1.42.0:

use the Display impl or to_string()

此错误的下级来源 (如果有)。 Read more

🔬 This is a nightly-only experimental API. (backtrace #53487)

返回发生错误的栈回溯 (如果有)。 Read more

👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

执行转换。

Auto Trait Implementations

Blanket Implementations

获取 selfTypeIdRead more

从拥有的值中一成不变地借用。 Read more

从拥有的值中借用。 Read more

执行转换。

执行转换。

将给定值转换为 StringRead more

发生转换错误时返回的类型。

执行转换。

发生转换错误时返回的类型。

执行转换。