diff options
| author | Felix Raimundo <felix.raimundo@tweag.io> | 2017-05-13 21:42:51 +0200 |
|---|---|---|
| committer | Felix Raimundo <felix.raimundo@tweag.io> | 2017-05-14 14:05:10 +0200 |
| commit | a9cb094879fabd23774a0d9dcfed7f3eeb9a4aff (patch) | |
| tree | 48f3dda41fe3752ec90211595fbbac8b65cfb229 /src/libstd/thread/mod.rs | |
| parent | 77f1bec6f5eb9ed632c973b97b12701294e6d3a5 (diff) | |
| download | rust-a9cb094879fabd23774a0d9dcfed7f3eeb9a4aff.tar.gz rust-a9cb094879fabd23774a0d9dcfed7f3eeb9a4aff.zip | |
Explain why `thread::yield_now` could be used.
Part of #29378.
Diffstat (limited to 'src/libstd/thread/mod.rs')
| -rw-r--r-- | src/libstd/thread/mod.rs | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/libstd/thread/mod.rs b/src/libstd/thread/mod.rs index 200368be275..8f1a88ed305 100644 --- a/src/libstd/thread/mod.rs +++ b/src/libstd/thread/mod.rs @@ -468,6 +468,23 @@ pub fn current() -> Thread { /// Cooperatively gives up a timeslice to the OS scheduler. /// +/// This is used when the programmer knows that the thread will have nothing +/// to do for some time, and thus avoid wasting computing time. +/// +/// For example when polling on a resource, it is common to check that it is +/// available, and if not to yield in order to avoid busy waiting. +/// +/// Thus the pattern of `yield`ing after a failed poll is rather common when +/// implementing low-level shared resources or synchronization primitives. +/// +/// However programmers will usualy prefer to use, [`channel`]s, [`Condvar`]s, +/// [`Mutex`]es or [`join`] for their synchronisation routines, as they avoid +/// thinking about thread schedulling. +/// +/// Note that [`channel`]s for example are implemented using this primitive. +/// Indeed when you call `send` or `recv`, which are blocking, they will yield +/// if the channel is not available. +/// /// # Examples /// /// ``` @@ -475,6 +492,12 @@ pub fn current() -> Thread { /// /// thread::yield_now(); /// ``` +/// +/// [`channel`]: ../../std/sync/mpsc/index.html +/// [`spawn`]: ../../std/thread/fn.spawn.html +/// [`join`]: ../../std/thread/struct.JoinHandle.html#method.join +/// [`Mutex`]: ../../std/sync/struct.Mutex.html +/// [`Condvar`]: ../../std/sync/struct.Condvar.html #[stable(feature = "rust1", since = "1.0.0")] pub fn yield_now() { imp::Thread::yield_now() |
