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:
Pietro Albini 2018-08-01 10:12:38 +02:00 committed by GitHub
commit 06b91a4901
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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();
/// ///