pub struct Thread {
inner: Pin<Arc<Inner>>,
}
Expand description
A handle to a thread.
Threads are represented via the Thread
type, which you can get in one of
two ways:
- By spawning a new thread, e.g., using the
thread::spawn
function, and callingthread
on theJoinHandle
. - By requesting the current thread, using the
thread::current
function.
The thread::current
function is available even for threads not spawned
by the APIs of this module.
There is usually no need to create a Thread
struct yourself, one
should instead use a function like spawn
to create new threads, see the
docs of Builder
and spawn
for more details.
Fields§
§inner: Pin<Arc<Inner>>
Implementations§
Source§impl Thread
impl Thread
pub(crate) fn new(id: ThreadId, name: Option<String>) -> Thread
Sourcepub(crate) unsafe fn park_timeout(&self, dur: Duration)
pub(crate) unsafe fn park_timeout(&self, dur: Duration)
Like the public park_timeout
, but callable on any handle. This is
used to allow parking in TLS destructors.
§Safety
May only be called from the thread to which this handle belongs.
1.0.0 · Sourcepub fn unpark(&self)
pub fn unpark(&self)
Atomically makes the handle’s token available if it is not already.
Every thread is equipped with some basic low-level blocking support, via
the park
function and the unpark()
method. These can be
used as a more CPU-efficient implementation of a spinlock.
See the park documentation for more details.
§Examples
use std::thread;
use std::time::Duration;
let parked_thread = thread::Builder::new()
.spawn(|| {
println!("Parking thread");
thread::park();
println!("Thread unparked");
})
.unwrap();
// Let some time pass for the thread to be spawned.
thread::sleep(Duration::from_millis(10));
println!("Unpark the thread");
parked_thread.thread().unpark();
parked_thread.join().unwrap();
1.0.0 · Sourcepub fn name(&self) -> Option<&str>
pub fn name(&self) -> Option<&str>
Gets the thread’s name.
For more information about named threads, see this module-level documentation.
§Examples
Threads by default have no name specified:
use std::thread;
let builder = thread::Builder::new();
let handler = builder.spawn(|| {
assert!(thread::current().name().is_none());
}).unwrap();
handler.join().unwrap();
Thread with a specified name:
Sourcepub fn into_raw(self) -> *const ()
🔬This is a nightly-only experimental API. (thread_raw
#97523)
pub fn into_raw(self) -> *const ()
thread_raw
#97523)Consumes the Thread
, returning a raw pointer.
To avoid a memory leak the pointer must be converted
back into a Thread
using Thread::from_raw
.
§Examples
Sourcepub unsafe fn from_raw(ptr: *const ()) -> Thread
🔬This is a nightly-only experimental API. (thread_raw
#97523)
pub unsafe fn from_raw(ptr: *const ()) -> Thread
thread_raw
#97523)Constructs a Thread
from a raw pointer.
The raw pointer must have been previously returned
by a call to Thread::into_raw
.
§Safety
This function is unsafe because improper use may lead
to memory unsafety, even if the returned Thread
is never
accessed.
Creating a Thread
from a pointer other than one returned
from Thread::into_raw
is undefined behavior.
Calling this function twice on the same raw pointer can lead
to a double-free if both Thread
instances are dropped.
fn cname(&self) -> Option<&CStr>
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Thread
impl RefUnwindSafe for Thread
impl Send for Thread
impl Sync for Thread
impl Unpin for Thread
impl UnwindSafe for Thread
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> SizedTypeProperties for T
impl<T> SizedTypeProperties for T
Source§#[doc(hidden)] const IS_ZST: bool = _
#[doc(hidden)] const IS_ZST: bool = _
sized_type_properties
)Source§#[doc(hidden)] const LAYOUT: Layout = _
#[doc(hidden)] const LAYOUT: Layout = _
sized_type_properties
)Source§#[doc(hidden)] const MAX_SLICE_LEN: usize = _
#[doc(hidden)] const MAX_SLICE_LEN: usize = _
sized_type_properties
)[Self]
. Read more