當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。