Skip to content

Commit

Permalink
Expand a bit on thread::park spurious wakeups
Browse files Browse the repository at this point in the history
Fixes #26475
  • Loading branch information
steveklabnik committed Jul 21, 2015
1 parent 4e51763 commit cbdc52e
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions src/libstd/thread/mod.rs
Expand Up @@ -508,9 +508,25 @@ pub fn sleep(dur: Duration) {
imp::Thread::sleep(dur)
}

/// Blocks unless or until the current thread's token is made available (may wake spuriously).
/// Blocks unless or until the current thread's token is made available.
///
/// See the module doc for more detail.
/// Every thread is equipped with some basic low-level blocking support, via
/// the `park()` function and the [`unpark()`][unpark] method. These can be
/// used as a more CPU-efficient implementation of a spinlock.
///
/// [unpark]: struct.Thread.html#method.unpark
///
/// The API is typically used by acquiring a handle to the current thread,
/// placing that handle in a shared data structure so that other threads can
/// find it, and then parking (in a loop with a check for the token actually
/// being acquired).
///
/// A call to `park` does not guarantee that the thread will remain parked
/// forever, and callers should be prepared for this possibility.
///
/// See the [module documentation][thread] for more detail.
///
/// [thread]: index.html
//
// The implementation currently uses the trivial strategy of a Mutex+Condvar
// with wakeup flag, which does not actually allow spurious wakeups. In the
Expand Down

0 comments on commit cbdc52e

Please sign in to comment.