本文简要介绍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 Builder.spawn用法及代码示例
- Rust Builder.stack_size用法及代码示例
- Rust Builder.new用法及代码示例
- Rust Builder.name用法及代码示例
- Rust Builder用法及代码示例
- Rust BuildHasher.build_hasher用法及代码示例
- Rust BuildHasher用法及代码示例
- Rust BuildHasher.hash_one用法及代码示例
- Rust BuildHasherDefault用法及代码示例
- Rust BufRead.split用法及代码示例
- Rust BufWriter.capacity用法及代码示例
- Rust BufReader.new用法及代码示例
- Rust BufWriter.get_ref用法及代码示例
- Rust BufReader.get_mut用法及代码示例
- Rust BufReader.with_capacity用法及代码示例
- Rust BufWriter.get_mut用法及代码示例
- Rust BufRead.fill_buf用法及代码示例
- Rust BufRead.has_data_left用法及代码示例
- Rust BufRead.read_until用法及代码示例
- Rust BufWriter.into_inner用法及代码示例
- Rust BufRead.read_line用法及代码示例
- Rust BufWriter用法及代码示例
- Rust BufReader.capacity用法及代码示例
- Rust BufWriter.with_capacity用法及代码示例
- Rust BufWriter.new用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 std::thread::Builder.spawn_unchecked。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。