Struct Thread
struct Thread { ... }
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::spawnfunction, and callingthreadon theJoinHandle. - By requesting the current thread, using the
thread::currentfunction.
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.
Implementations
impl Thread
fn unpark(self: &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
parkfunction and theunpark()method. These can be used as a more CPU-efficient implementation of a spinlock.See the park documentation for more details.
Examples
use thread; use Duration; use ; static QUEUED: AtomicBool = new; let parked_thread = new .spawn .unwrap; // Let some time pass for the thread to be spawned. sleep; // Wait until the other thread is queued. // This is crucial! It guarantees that the `unpark` below is not consumed // by some other code in the parked thread (e.g. inside `println!`). while !QUEUED.load println!; parked_thread.thread.unpark; parked_thread.join.unwrap;fn id(self: &Self) -> ThreadIdGets the thread's unique identifier.
Examples
use thread; let other_thread = spawn; let other_thread_id = other_thread.join.unwrap; assert!;fn name(self: &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 thread; let builder = new; let handler = builder.spawn.unwrap; handler.join.unwrap;Thread with a specified name:
use thread; let builder = new .name; let handler = builder.spawn.unwrap; handler.join.unwrap;fn into_raw(self: Self) -> *const ()Consumes the
Thread, returning a raw pointer.To avoid a memory leak the pointer must be converted back into a
ThreadusingThread::from_raw. The pointer is guaranteed to be aligned to at least 8 bytes.Examples
use ; let thread = current; let id = thread.id; let ptr = into_raw; unsafeunsafe fn from_raw(ptr: *const ()) -> ThreadConstructs a
Threadfrom 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
Threadis never accessed.Creating a
Threadfrom a pointer other than one returned fromThread::into_rawis undefined behavior.Calling this function twice on the same raw pointer can lead to a double-free if both
Threadinstances are dropped.
impl Clone for Thread
fn clone(self: &Self) -> Thread
impl Debug for Thread
fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result
impl Freeze for Thread
impl RefUnwindSafe for Thread
impl Send for Thread
impl Sync for Thread
impl Unpin for Thread
impl UnsafeUnpin for Thread
impl UnwindSafe for Thread
impl<T> Any for Thread
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for Thread
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for Thread
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> CloneToUninit for Thread
unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)
impl<T> From for Thread
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToOwned for Thread
fn to_owned(self: &Self) -> Tfn clone_into(self: &Self, target: &mut T)
impl<T, U> Into for Thread
fn into(self: Self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom for Thread
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for Thread
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>