Struct std::thread::Builder 1.0.0[−][src]
pub struct Builder { /* fields omitted */ }
Expand description
线程工厂,可用于配置新线程的属性。
可以在其上链接方法以对其进行配置。
有两种配置可供选择:
name
: 指定一个 线程的关联名stack_size
: 指定 线程所需的栈大小
spawn
方法将获取构建器的所有权,并使用给定的配置为线程句柄创建 io::Result
。
thread::spawn
自由函数使用默认配置的 Builder
,并返回其值 unwrap
。
当您想从启动线程失败中恢复时,您可能想使用 spawn
而不是 thread::spawn
,实际上,实际上自由函数会在 Builder
方法返回 io::Result
时 panic。
Examples
use std::thread; let builder = thread::Builder::new(); let handler = builder.spawn(|| { // 线程代码 }).unwrap(); handler.join().unwrap();Run
Implementations
通过获取 Builder
的所有权产生一个新线程,并向其 JoinHandle
返回一个 io::Result
。
衍生的线程可能比调用者活得长 (除非调用者线程是主线程; 当主线程结束时,整个进程将终止)。 join 句柄可用于阻塞子线程的终止,包括恢复其 panic。
有关更完整的文档,请参见 thread::spawn
。
Errors
与 spawn
自由函数不同,此方法产生 io::Result
来捕获在操作系统级别创建线程的任何失败。
Panics
如果设置了线程名称并且它包含空字节,则会出现 panic。
Examples
use std::thread; let builder = thread::Builder::new(); let handler = builder.spawn(|| { // 线程代码 }).unwrap(); handler.join().unwrap();Run
pub unsafe fn spawn_unchecked<'a, F, T>(self, f: F) -> Result<JoinHandle<T>> where
F: FnOnce() -> T,
F: Send + 'a,
T: Send + 'a,
[src]
pub unsafe fn spawn_unchecked<'a, F, T>(self, f: F) -> Result<JoinHandle<T>> where
F: FnOnce() -> T,
F: Send + 'a,
T: Send + 'a,
[src]通过获取 Builder
的所有权来产生不受任何生命周期限制的新线程,并将 io::Result
返回其 JoinHandle
。
衍生的线程可能比调用者活得长 (除非调用者线程是主线程; 当主线程结束时,整个进程将终止)。 join 句柄可用于阻塞子线程的终止,包括恢复其 panic。
此方法与 thread::Builder::spawn
相同,不同之处在于宽松的生命周期界限使其不安全。
有关更完整的文档,请参见 thread::spawn
。
Errors
与 spawn
自由函数不同,此方法产生 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