当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust Builder.spawn_unchecked用法及代码示例


本文简要介绍rust语言中 std::thread::Builder.spawn_unchecked 的用法。

用法

pub unsafe fn spawn_unchecked<'a, F, T>(self, f: F) -> Result<JoinHandle<T>> where    F: FnOnce() -> T,    F: Send + 'a,    T: Send + 'a,

通过获取 Builder 的所有权来生成一个没有任何生命周期限制的新线程,并将 io::Result 返回到其 JoinHandle

生成的线程可能比调用者活得更久(除非调用者线程是主线程;整个进程在主线程完成时终止)。连接句柄可用于阻止生成的线程终止,包括恢复其Panics。

此方法与 thread::Builder::spawn 相同,除了宽松的生命周期界限,这使其不安全。如需更完整的文档,请参阅 thread::spawn

错误

spawn 自由函数不同,此方法产生 io::Result 以捕获在操作系统级别创建线程的任何失败。

Panics

如果设置了线程名称并且它包含空字节,则会出现Panics。

安全性

调用者必须确保生成的线程不会超过提供的线程闭包及其返回类型中的任何引用。这可以通过两种方式来保证:

  • 确保在删除任何引用的数据之前调用 join
  • 仅使用具有 'static 生命周期界限的类型,即那些没有或只有 'static 引用的类型( thread::Builder::spawn thread::spawn 都静态地强制执行此属性)

例子

#![feature(thread_spawn_unchecked)]
use std::thread;

let builder = thread::Builder::new();

let x = 1;
let thread_x = &x;

let handler = unsafe {
    builder.spawn_unchecked(move || {
        println!("x = {}", *thread_x);
    }).unwrap()
};

// caller has to ensure `join()` is called, otherwise
// it is possible to access freed memory if `x` gets
// dropped before the thread closure is executed!
handler.join().unwrap();

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 std::thread::Builder.spawn_unchecked。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。