about summary refs log tree commit diff
path: root/src/libstd/thread/mod.rs
AgeCommit message (Collapse)AuthorLines
2018-10-13Update mod.rsoliver-giersch-3/+3
removes trailing whitespaces, replaces TODO with FIXME
2018-10-13Update mod.rsoliver-giersch-3/+2
removes unnecessary `unsafe`, adds `unstable` attribute
2018-10-13adds unsafe `thread::Builder::spawn_unchecked` functionoliver-giersch-11/+17
moves code for `thread::Builder::spawn` into new public unsafe function `spawn_unchecked` and transforms `spawn` into a safe wrapper.
2018-10-11improve docs on thread::sleepVasya Novikov-4/+8
2018-10-11std: Implement TLS for wasm32-unknown-unknownAlex Crichton-1/+1
This adds an implementation of thread local storage for the `wasm32-unknown-unknown` target when the `atomics` feature is implemented. This, however, comes with a notable caveat of that it requires a new feature of the standard library, `wasm-bindgen-threads`, to be enabled. Thread local storage for wasm (when `atomics` are enabled and there's actually more than one thread) is powered by the assumption that an external entity can fill in some information for us. It's not currently clear who will fill in this information nor whose responsibility it should be long-term. In the meantime there's a strategy being gamed out in the `wasm-bindgen` project specifically, and the hope is that we can continue to test and iterate on the standard library without committing to a particular strategy yet. As to the details of `wasm-bindgen`'s strategy, LLVM doesn't currently have the ability to emit custom `global` values (thread locals in a `WebAssembly.Module`) so we leverage the `wasm-bindgen` CLI tool to do it for us. To that end we have a few intrinsics, assuming two global values: * `__wbindgen_current_id` - gets the current thread id as a 32-bit integer. It's `wasm-bindgen`'s responsibility to initialize this per-thread and then inform libstd of the id. Currently `wasm-bindgen` performs this initialization as part of the `start` function. * `__wbindgen_tcb_{get,set}` - in addition to a thread id it's assumed that there's a global available for simply storing a pointer's worth of information (a thread control block, which currently only contains thread local storage). This would ideally be a native `global` injected by LLVM, but we don't have a great way to support that right now. To reiterate, this is all intended to be unstable and purely intended for testing out Rust on the web with threads. The story is very likely to change in the future and we want to make sure that we're able to do that!
2018-10-06Fix typo in libstd/thread/mod.rs: remove unnecessary commaArtem Varaksa-1/+1
2018-10-01update wording for thread::sleepVasya Novikov-6/+6
2018-09-28update wording for std::thread::sleepVasya Novikov-4/+4
2018-09-28fix std::thread::sleep typoVasya Novikov-1/+1
2018-09-18Expand synchronization comments in `park`/`unpark`James Duley-8/+13
2018-09-14Add comments and assertion to `park`/`unpark`James Duley-2/+12
regarding the synchronization.
2018-09-12Fix `thread` `park`/`unpark` synchronizationJames Duley-18/+11
Previously the code below would not be guaranteed to exit when the first spawned thread took the `return, // already unparked` path because there was no write to synchronize with a read in `park`. ``` use std::sync::atomic::{AtomicBool, Ordering}; use std::thread::{current, spawn, park}; static FLAG: AtomicBool = AtomicBool::new(false); fn main() { let thread_0 = current(); spawn(move || { FLAG.store(true, Ordering::Relaxed); thread_0.unpark(); }); let thread_0 = current(); spawn(move || { thread_0.unpark(); }); while !FLAG.load(Ordering::Relaxed) { park(); } } ```
2018-08-28split paragraphRalf Jung-3/+5
2018-08-15document effect of join on memory orderingRalf Jung-1/+5
2018-08-08avoid using the word 'initialized' to talk about that non-reentrant-capable ↵Ralf Jung-1/+1
state of the mutex
2018-08-06actually, reentrant uninitialized mutex acquisition is outright UBRalf Jung-3/+2
2018-08-06clarify partially initialized Mutex issuesRalf Jung-0/+3
2018-08-01Rollup merge of #52771 - matklad:patch-1, r=kennytmPietro Albini-1/+4
Clarify thread::park semantics It took me quite some time to realize that the example is not actually racy, so let's clarify it? :-)
2018-07-28Rollup merge of #52759 - stjepang:impl-send-sync-for-joinhandle, r=TimNNkennytm-0/+5
Impl Send & Sync for JoinHandle This is just a cosmetic change - it slightly relaxes and clarifies the public API without effectively promising any new guarantees. Currently we have [these auto trait implementations](https://doc.rust-lang.org/nightly/std/thread/struct.JoinHandle.html#synthetic-implementations): ```rust impl<T: Send> Send for JoinHandle<T> {} impl<T: Sync> Sync for JoinHandle<T> {} ``` Bound `T: Send` doesn't make much sense because `JoinHandle<T>` can be created only when `T: Send`. Note that [`JoinHandle::<T>::join`](https://doc.rust-lang.org/nightly/std/thread/struct.JoinHandle.html#method.join) doesn't require `T: Send` so why should the `Send` impl? And the `Sync` impl doesn't need `T: Sync` because `JoinHandle<T>` cannot even share `T` - it can only send it to the thread that calls `join`.
2018-07-27Fix wsAleksey Kladov-1/+1
2018-07-27Clarify thread::park semanticsAleksey Kladov-1/+4
2018-07-27Add stability attributesStjepan Glavina-0/+2
2018-07-27Impl Send & Sync for JoinHandleStjepan Glavina-0/+3
2018-07-11Add missing dyn in testsljedrz-4/+4
2018-07-10Deny bare trait objects in `src/libstd`.ljedrz-1/+1
2018-06-29Auto merge of #51290 - Pslydhh:master, r=alexcrichtonbors-2/+8
park/park_timeout: prohibit spurious wakeups in next park <pre><code> // The implementation currently uses the trivial strategy of a Mutex+Condvar // with wakeup flag, which does not actually allow spurious wakeups. </pre></code> Because does not actually allow spurious wakeups. so we have let thread.inner.cvar.wait(m) in the loop to prohibit spurious wakeups. but if notified after we locked, this notification doesn't be consumed, it return, the next park will consume this notification...this is also 'spurious wakeup' case, 'one unpark() wakeups two park()'. We should improve this situation: `thread.inner.state.store(EMPTY, SeqCst);`
2018-06-17libstd: add an RAII utility for sys_common::mutex::MutexNODA, Kai-4/+1
Signed-off-by: NODA, Kai <nodakai@gmail.com>
2018-06-02removes tabsPslydhh-8/+6
2018-06-02remove trailing whitespacePslydhh-6/+6
remove trailing whitespace
2018-06-02park():prohibit spurious wakeups in next parkPslydhh-2/+10
should consume this notification, so prohibit spurious wakeups in next park
2018-04-13std: Minimize size of panicking on wasmAlex Crichton-0/+3
This commit applies a few code size optimizations for the wasm target to the standard library, namely around panics. We notably know that in most configurations it's impossible for us to print anything in wasm32-unknown-unknown so we can skip larger portions of panicking that are otherwise simply informative. This allows us to get quite a nice size reduction. Finally we can also tweak where the allocation happens for the `Box<Any>` that we panic with. By only allocating once unwinding starts we can reduce the size of a panicking wasm module from 44k to 350 bytes.
2018-02-28Remove thread_local_stateStjepan Glavina-3/+0
2018-02-28Stabilize LocalKey::try_withStjepan Glavina-1/+4
2018-02-17Unify 'Platform-specific behavior' documentation headings.Corey Farwell-3/+3
2017-11-02Make join a link to the function's documentationSebastian Dröge-1/+1
2017-11-02Mention that panics can't possibly be caught when compiling with panic=abortSebastian Dröge-1/+1
2017-11-02Use ` instead of ' for function namesSebastian Dröge-2/+2
2017-11-02Update the std::thread docs and clarify that panics can nowadays be caughtSebastian Dröge-5/+9
2017-10-25std: Optimize thread park/unpark implementationAlex Crichton-15/+72
This is an adaptation of alexcrichton/futures-rs#597 for the standard library. The goal here is to avoid locking a mutex on the "fast path" for thread park/unpark where you're waking up a thread that isn't sleeping or otherwise trying to park a thread that's already been notified. Mutex performance varies quite a bit across platforms so this should provide a nice consistent speed boost for the fast path of these functions.
2017-10-08Don't encourage people to ignore threading errors in the docsJake Goulding-5/+7
2017-09-18Rollup merge of #44651 - bluss:document-thread-name-no-nuls, r=steveklabnikAlex Crichton-0/+7
Document thread builder panics for nul bytes in thread names This seems to have been undocumented. Mention this where the name is set (Builder::name) and where the panic could happen (Builder::spawn). Thread::new is private and I think the builder is the only user where this matters. A short comment was added to "document" Thread::new too.
2017-09-17std: Document thread builder panics for nul bytes in thread namesUlrik Sverdrup-0/+7
This seems to have been undocumented. Mention this where the name is set (Builder::name) and where the panic could happen (Builder::spawn). Thread::new is private and I think the builder is the only user where this matters. A short comment was added to "document" Thread::new too.
2017-09-13Move default stack min size to thread implementationsTobias Schaffner-2/+2
The default min stack size value is smaller on l4re and therefore this value has to be different depending on the platform.
2017-08-27Auto merge of #44112 - alexcrichton:thread-join, r=sfacklerbors-0/+5
std: Handle OS errors when joining threads Also add to the documentation that the `join` method can panic. cc #34971 cc #43539
2017-08-26std: Handle OS errors when joining threadsAlex Crichton-0/+5
Also add to the documentation that the `join` method can panic. cc #34971 cc #43539
2017-08-24Fix inconsistent doc headingslukaramu-1/+1
This fixes headings reading "Unsafety" and "Example", they should be "Safety" and "Examples" according to RFC 1574.
2017-08-22Thread spawning: don't run `min_stack` if the user has specified stack size.Corey Farwell-1/+1
2017-08-15Fix typos & us spellingsFourchaux-1/+1
2017-08-14Indicate which stack size option has precedence.Corey Farwell-1/+1
2017-08-13Indicate thread names get passed to the OS.Corey Farwell-4/+8