Rollup merge of #52771 - matklad:patch-1, r=kennytm
Clarify thread::park semantics It took me quite some time to realize that the example is not actually racy, so let's clarify it? :-)
This commit is contained in:
commit
06b91a4901
@ -731,7 +731,8 @@ const NOTIFIED: usize = 2;
|
|||||||
/// specifying a maximum time to block the thread for.
|
/// specifying a maximum time to block the thread for.
|
||||||
///
|
///
|
||||||
/// * The [`unpark`] method on a [`Thread`] atomically makes the token available
|
/// * The [`unpark`] method on a [`Thread`] atomically makes the token available
|
||||||
/// if it wasn't already.
|
/// if it wasn't already. Because the token is initially absent, [`unpark`]
|
||||||
|
/// followed by [`park`] will result in the second call returning immediately.
|
||||||
///
|
///
|
||||||
/// In other words, each [`Thread`] acts a bit like a spinlock that can be
|
/// In other words, each [`Thread`] acts a bit like a spinlock that can be
|
||||||
/// locked and unlocked using `park` and `unpark`.
|
/// locked and unlocked using `park` and `unpark`.
|
||||||
@ -766,6 +767,8 @@ const NOTIFIED: usize = 2;
|
|||||||
/// // Let some time pass for the thread to be spawned.
|
/// // Let some time pass for the thread to be spawned.
|
||||||
/// thread::sleep(Duration::from_millis(10));
|
/// thread::sleep(Duration::from_millis(10));
|
||||||
///
|
///
|
||||||
|
/// // There is no race condition here, if `unpark`
|
||||||
|
/// // happens first, `park` will return immediately.
|
||||||
/// println!("Unpark the thread");
|
/// println!("Unpark the thread");
|
||||||
/// parked_thread.thread().unpark();
|
/// parked_thread.thread().unpark();
|
||||||
///
|
///
|
||||||
|
Loading…
Reference in New Issue
Block a user