pub struct ThreadRng { /* private fields */ }
Expand description
The type returned by thread_rng
, essentially just a reference to the
PRNG in thread-local memory.
ThreadRng
uses ReseedingRng
wrapping the same PRNG as StdRng
,
which is reseeded after generating 32 MiB of random data. A single instance
is cached per thread and the returned ThreadRng
is a reference to this
instance — hence ThreadRng
is neither Send
nor Sync
but is safe to use
within a single thread. This RNG is seeded and reseeded via EntropyRng
as required.
Note that the reseeding is done as an extra precaution against entropy
leaks and is in theory unnecessary — to predict ThreadRng
’s output, an
attacker would have to either determine most of the RNG’s seed or internal
state, or crack the algorithm used.
Like StdRng
, ThreadRng
is a cryptographically secure PRNG. The current
algorithm used is HC-128, which is an array-based PRNG that trades memory
usage for better performance. This makes it similar to ISAAC, the algorithm
used in ThreadRng
before rand 0.5.
Cloning this handle just produces a new reference to the same thread-local generator.
Trait Implementations
impl CryptoRng for ThreadRng
Auto Trait Implementations
impl RefUnwindSafe for ThreadRng
impl !Send for ThreadRng
impl !Sync for ThreadRng
impl Unpin for ThreadRng
impl UnwindSafe for ThreadRng
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<R> Rng for R where
R: RngCore + ?Sized,
impl<R> Rng for R where
R: RngCore + ?Sized,
sourcefn gen<T>(&mut self) -> T where
Standard: Distribution<T>,
fn gen<T>(&mut self) -> T where
Standard: Distribution<T>,
sourcefn gen_range<T: SampleUniform, B1, B2>(&mut self, low: B1, high: B2) -> T where
B1: SampleBorrow<T> + Sized,
B2: SampleBorrow<T> + Sized,
fn gen_range<T: SampleUniform, B1, B2>(&mut self, low: B1, high: B2) -> T where
B1: SampleBorrow<T> + Sized,
B2: SampleBorrow<T> + Sized,
Generate a random value in the range [low
, high
), i.e. inclusive of
low
and exclusive of high
. Read more
sourcefn sample<T, D: Distribution<T>>(&mut self, distr: D) -> T
fn sample<T, D: Distribution<T>>(&mut self, distr: D) -> T
Sample a new value, using the given distribution. Read more
sourcefn sample_iter<'a, T, D: Distribution<T>>(
&'a mut self,
distr: &'a D
) -> DistIter<'a, D, Self, T>ⓘNotable traits for DistIter<'a, D, R, T>impl<'a, D, R, T> Iterator for DistIter<'a, D, R, T> where
D: Distribution<T>,
R: Rng + 'a, type Item = T;
where
Self: Sized,
fn sample_iter<'a, T, D: Distribution<T>>(
&'a mut self,
distr: &'a D
) -> DistIter<'a, D, Self, T>ⓘNotable traits for DistIter<'a, D, R, T>impl<'a, D, R, T> Iterator for DistIter<'a, D, R, T> where
D: Distribution<T>,
R: Rng + 'a, type Item = T;
where
Self: Sized,
D: Distribution<T>,
R: Rng + 'a, type Item = T;
Create an iterator that generates values using the given distribution. Read more
sourcefn fill<T: AsByteSliceMut + ?Sized>(&mut self, dest: &mut T)
fn fill<T: AsByteSliceMut + ?Sized>(&mut self, dest: &mut T)
Fill dest
entirely with random bytes (uniform value distribution),
where dest
is any type supporting AsByteSliceMut
, namely slices
and arrays over primitive integer types (i8
, i16
, u32
, etc.). Read more
sourcefn try_fill<T: AsByteSliceMut + ?Sized>(
&mut self,
dest: &mut T
) -> Result<(), Error>
fn try_fill<T: AsByteSliceMut + ?Sized>(
&mut self,
dest: &mut T
) -> Result<(), Error>
Fill dest
entirely with random bytes (uniform value distribution),
where dest
is any type supporting AsByteSliceMut
, namely slices
and arrays over primitive integer types (i8
, i16
, u32
, etc.). Read more
sourcefn gen_bool(&mut self, p: f64) -> bool
fn gen_bool(&mut self, p: f64) -> bool
Return a bool with a probability p
of being true. Read more
sourcefn gen_ratio(&mut self, numerator: u32, denominator: u32) -> bool
fn gen_ratio(&mut self, numerator: u32, denominator: u32) -> bool
Return a bool with a probability of numerator/denominator
of being
true. I.e. gen_ratio(2, 3)
has chance of 2 in 3, or about 67%, of
returning true. If numerator == denominator
, then the returned value
is guaranteed to be true
. If numerator == 0
, then the returned
value is guaranteed to be false
. Read more
sourcefn choose<'a, T>(&mut self, values: &'a [T]) -> Option<&'a T>
fn choose<'a, T>(&mut self, values: &'a [T]) -> Option<&'a T>
use SliceRandom::choose instead
Return a random element from values
. Read more
sourcefn choose_mut<'a, T>(&mut self, values: &'a mut [T]) -> Option<&'a mut T>
fn choose_mut<'a, T>(&mut self, values: &'a mut [T]) -> Option<&'a mut T>
use SliceRandom::choose_mut instead
Return a mutable pointer to a random element from values
. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcepub fn to_owned(&self) -> T
pub fn to_owned(&self) -> T
Creates owned data from borrowed data, usually by cloning. Read more
sourcepub fn clone_into(&self, target: &mut T)
pub fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more