Auto merge of #126839 - obeis:mpmc, r=Amanieu · qinheping/verify-rust-std@90d63b1 (original) (raw)
5 files changed
lines changed
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -153,7 +153,7 @@ | ||
| 153 | 153 | //! the [`io`], [`fs`], and [`net`] modules. |
| 154 | 154 | //! |
| 155 | 155 | //! The [`thread`] module contains Rust's threading abstractions. [`sync`] |
| 156 | -//! contains further primitive shared memory types, including [`atomic`] and | |
| 156 | +//! contains further primitive shared memory types, including [`atomic`], [`mpmc`] and | |
| 157 | 157 | //! [`mpsc`], which contains the channel types for message passing. |
| 158 | 158 | //! |
| 159 | 159 | //! # Use before and after `main()` |
| @@ -177,6 +177,7 @@ | ||
| 177 | 177 | //! - after-main use of thread-locals, which also affects additional features: |
| 178 | 178 | //! - [`thread::current()`] |
| 179 | 179 | //! - [`thread::scope()`] |
| 180 | +//! - [`sync::mpmc`] | |
| 180 | 181 | //! - [`sync::mpsc`] |
| 181 | 182 | //! - before-main stdio file descriptors are not guaranteed to be open on unix platforms |
| 182 | 183 | //! |
| @@ -202,6 +203,7 @@ | ||
| 202 | 203 | //! [`atomic`]: sync::atomic |
| 203 | 204 | //! [`for`]: ../book/ch03-05-control-flow.html#looping-through-a-collection-with-for |
| 204 | 205 | //! [`str`]: prim@str |
| 206 | +//! [`mpmc`]: sync::mpmc | |
| 205 | 207 | //! [`mpsc`]: sync::mpsc |
| 206 | 208 | //! [`std::cmp`]: cmp |
| 207 | 209 | //! [`std::slice`]: mod@slice |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -133,6 +133,11 @@ | ||
| 133 | 133 | //! inter-thread synchronisation mechanism, at the cost of some |
| 134 | 134 | //! extra memory. |
| 135 | 135 | //! |
| 136 | +//! - [`mpmc`]: Multi-producer, multi-consumer queues, used for | |
| 137 | +//! message-based communication. Can provide a lightweight | |
| 138 | +//! inter-thread synchronisation mechanism, at the cost of some | |
| 139 | +//! extra memory. | |
| 140 | +//! | |
| 136 | 141 | //! - [`Mutex`]: Mutual Exclusion mechanism, which ensures that at |
| 137 | 142 | //! most one thread at a time is able to access some data. |
| 138 | 143 | //! |
| @@ -153,6 +158,7 @@ | ||
| 153 | 158 | //! [`Arc`]: crate::sync::Arc |
| 154 | 159 | //! [`Barrier`]: crate::sync::Barrier |
| 155 | 160 | //! [`Condvar`]: crate::sync::Condvar |
| 161 | +//! [`mpmc`]: crate::sync::mpmc | |
| 156 | 162 | //! [`mpsc`]: crate::sync::mpsc |
| 157 | 163 | //! [`Mutex`]: crate::sync::Mutex |
| 158 | 164 | //! [`Once`]: crate::sync::Once |
| @@ -193,12 +199,13 @@ pub use self::rwlock::{MappedRwLockReadGuard, MappedRwLockWriteGuard}; | ||
| 193 | 199 | #[stable(feature = "rust1", since = "1.0.0")] |
| 194 | 200 | pub use self::rwlock::{RwLock, RwLockReadGuard, RwLockWriteGuard}; |
| 195 | 201 | |
| 202 | +#[unstable(feature = "mpmc_channel", issue = "126840")] | |
| 203 | +pub mod mpmc; | |
| 196 | 204 | pub mod mpsc; |
| 197 | 205 | |
| 198 | 206 | mod barrier; |
| 199 | 207 | mod condvar; |
| 200 | 208 | mod lazy_lock; |
| 201 | -mod mpmc; | |
| 202 | 209 | mod mutex; |
| 203 | 210 | pub(crate) mod once; |
| 204 | 211 | mod once_lock; |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -7,6 +7,7 @@ use crate::{error, fmt}; | ||
| 7 | 7 | /// |
| 8 | 8 | /// [`send_timeout`]: super::Sender::send_timeout |
| 9 | 9 | #[derive(PartialEq, Eq, Clone, Copy)] |
| 10 | +#[unstable(feature = "mpmc_channel", issue = "126840")] | |
| 10 | 11 | pub enum SendTimeoutError<T> { |
| 11 | 12 | /// The message could not be sent because the channel is full and the operation timed out. |
| 12 | 13 | /// |
| @@ -18,12 +19,14 @@ pub enum SendTimeoutError { | ||
| 18 | 19 | Disconnected(T), |
| 19 | 20 | } |
| 20 | 21 | |
| 22 | +#[unstable(feature = "mpmc_channel", issue = "126840")] | |
| 21 | 23 | impl<T> fmt::Debug for SendTimeoutError<T> { |
| 22 | 24 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| 23 | 25 | "SendTimeoutError(..)".fmt(f) |
| 24 | 26 | } |
| 25 | 27 | } |
| 26 | 28 | |
| 29 | +#[unstable(feature = "mpmc_channel", issue = "126840")] | |
| 27 | 30 | impl<T> fmt::Display for SendTimeoutError<T> { |
| 28 | 31 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| 29 | 32 | match *self { |
| @@ -33,8 +36,10 @@ impl fmt::Display for SendTimeoutError { | ||
| 33 | 36 | } |
| 34 | 37 | } |
| 35 | 38 | |
| 39 | +#[unstable(feature = "mpmc_channel", issue = "126840")] | |
| 36 | 40 | impl<T> error::Error for SendTimeoutError<T> {} |
| 37 | 41 | |
| 42 | +#[unstable(feature = "mpmc_channel", issue = "126840")] | |
| 38 | 43 | impl<T> From<SendError<T>> for SendTimeoutError<T> { |
| 39 | 44 | fn from(err: SendError<T>) -> SendTimeoutError<T> { |
| 40 | 45 | match err { |