Struct std::thread::Builder 1.0.0[−][src]
pub struct Builder { /* fields omitted */ }
Expand description
线程工厂,可用于配置新线程的属性。
可以在其上链接方法以对其进行配置。
有两种配置可供选择:
name
: specifies an associated name for the threadstack_size
: specifies the desired stack size for the thread
spawn
方法将获取构建器的所有权,并使用给定的配置为线程句柄创建 io::Result
。
thread::spawn
free 函数使用带有默认配置的 Builder
,并且 unwrap
是其返回值。
当您想从启动线程失败中恢复时,您可能想使用 spawn
而不是 thread::spawn
,实际上,free 函数会在 Builder
方法返回 io::Result
时 panic。
Examples
use std::thread;
let builder = thread::Builder::new();
let handler = builder.spawn(|| {
// 线程代码
}).unwrap();
handler.join().unwrap();
RunImplementations
通过获取 Builder
的所有权产生一个新线程,并向其 JoinHandle
返回一个 io::Result
。
衍生的线程可能比调用者活得长 (除非调用者线程是主线程; 当主线程结束时,整个进程将终止)。 连接句柄可用于在新线程终止时阻塞,包括恢复其 panics。
有关更完整的文档,请参见 thread::spawn
。
Errors
与 spawn
的 free 函数不同,此方法产生 io::Result
来捕获在操作系统级别创建线程的任何失败。
Panics
如果设置了线程名称并且它包含空字节,就会出现 panic。
Examples
use std::thread;
let builder = thread::Builder::new();
let handler = builder.spawn(|| {
// 线程代码
}).unwrap();
handler.join().unwrap();
Runpub unsafe fn spawn_unchecked<'a, F, T>(self, f: F) -> Result<JoinHandle<T>> where
F: FnOnce() -> T,
F: Send + 'a,
T: Send + 'a,
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
。
Errors
与 spawn
的 free 函数不同,此方法产生 io::Result
来捕获在操作系统级别创建线程的任何失败。
Panics
如果设置了线程名称并且它包含空字节,就会出现 panic。
Safety
调用者必须确保新建线程的生命周期不会超过所提供线程闭包及其返回类型中的任何引用。 可以通过两种方式保证这一点:
- 确保在丢弃任何引用数据之前已调用
join
- 仅使用具有
'static
生命周期界限的类型,即没有'static
引用或仅具有'static
引用的类型 (thread::Builder::spawn
和thread::spawn
都静态地强制执行此属性)
Examples
#![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()
};
// 调用者必须确保已调用 `join()`,否则,如果在执行线程闭包之前 `x` 被丢弃,则可以访问释放的内存!
handler.join().unwrap();
Run