# [−][src]Struct rand::rngs::ThreadRng

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 Default for ThreadRng`

[src]

`impl Default for ThreadRng`

`impl Clone for ThreadRng`

[src]

`impl Clone for ThreadRng`

`fn clone(&self) -> ThreadRng` | [src] |

`fn clone_from(&mut self, source: &Self)` | 1.0.0 [src] |

Performs copy-assignment from `source`

. Read more

`impl Debug for ThreadRng`

[src]

`impl Debug for ThreadRng`

`impl RngCore for ThreadRng`

[src]

`impl RngCore for ThreadRng`

`fn next_u32(&mut self) -> u32` | [src] |

`fn next_u64(&mut self) -> u64` | [src] |

`fn fill_bytes(&mut self, dest: &mut [u8])` | [src] |

`fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), Error>` | [src] |

`impl CryptoRng for ThreadRng`

[src]

`impl CryptoRng for ThreadRng`

## Auto Trait Implementations

## Blanket Implementations

`impl<R> Rng for R where`

R: RngCore + ?Sized,

[src]

`impl<R> Rng for R where`

R: RngCore + ?Sized,

`fn gen<T>(&mut self) -> T where` | [src] |

Return a random value supporting the [`Standard`

] distribution. Read more

`fn gen_range<T: SampleUniform, B1, B2>(&mut self, low: B1, high: B2) -> T where` | [src] |

Generate a random value in the range [`low`

, `high`

), i.e. inclusive of `low`

and exclusive of `high`

. Read more

`fn sample<T, D: Distribution<T>>(&mut self, distr: D) -> T` | [src] |

Sample a new value, using the given distribution. Read more

#### ⓘImportant traits for DistIter<'a, D, R, T>

`fn sample_iter<'a, T, D: Distribution<T>>(` | [src] |

Create an iterator that generates values using the given distribution. Read more

`fn fill<T: AsByteSliceMut + ?Sized>(&mut self, dest: &mut T)` | [src] |

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

`fn try_fill<T: AsByteSliceMut + ?Sized>(` | [src] |

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

`fn gen_bool(&mut self, p: f64) -> bool` | [src] |

Return a bool with a probability `p`

of being true. Read more

`fn gen_ratio(&mut self, numerator: u32, denominator: u32) -> bool` | [src] |

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

`fn choose<'a, T>(&mut self, values: &'a [T]) -> Option<&'a T>` | [src] |

use SliceRandom::choose instead

Return a random element from `values`

. Read more

`fn choose_mut<'a, T>(&mut self, values: &'a mut [T]) -> Option<&'a mut T>` | [src] |

use SliceRandom::choose_mut instead

Return a mutable pointer to a random element from `values`

. Read more

`fn shuffle<T>(&mut self, values: &mut [T])` | [src] |

use SliceRandom::shuffle instead

Shuffle a mutable slice in place. Read more

`impl<T> From for T`

[src]

`impl<T> From for T`

`impl<T, U> Into for T where`

U: From<T>,

[src]

`impl<T, U> Into for T where`

U: From<T>,

`impl<T> ToOwned for T where`

T: Clone,

[src]

`impl<T> ToOwned for T where`

T: Clone,

`impl<T, U> TryFrom for T where`

T: From<U>,

[src]

`impl<T, U> TryFrom for T where`

T: From<U>,

`type Error = !`

`try_from`

)The type returned in the event of a conversion error.

`fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>` | [src] |

`impl<T> Borrow for T where`

T: ?Sized,

[src]

`impl<T> Borrow for T where`

T: ?Sized,

`impl<T> BorrowMut for T where`

T: ?Sized,

[src]

`impl<T> BorrowMut for T where`

T: ?Sized,

`fn borrow_mut(&mut self) -> &mut T` | [src] |

`impl<T, U> TryInto for T where`

U: TryFrom<T>,

[src]

`impl<T, U> TryInto for T where`

U: TryFrom<T>,

`type Error = <U as TryFrom<T>>::Error`

`try_from`

)The type returned in the event of a conversion error.

`fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>` | [src] |

`impl<T> Any for T where`

T: 'static + ?Sized,

[src]

`impl<T> Any for T where`

T: 'static + ?Sized,

`fn get_type_id(&self) -> TypeId` | [src] |

`impl<T> FromCast for T`

[src]

`impl<T> FromCast for T`

`impl<T, U> Cast for T where`

U: FromCast<T>,

[src]

`impl<T, U> Cast for T where`

U: FromCast<T>,

`impl<T> FromBits for T`

[src]

`impl<T> FromBits for T`

`impl<T, U> IntoBits for T where`

U: FromBits<T>,

[src]

`impl<T, U> IntoBits for T where`

U: FromBits<T>,