title: Multiple random number generator states in c/Unix
body: <p>I'm using srandom() and random() to generate random numbers in c on a Unix system.  I would like to have multiple RNGs.  Each one, given the same seed, should output the same sequence.  I would also like to save and restore the state of each one.  Here's a pseudocode example:</p>
  
  <pre><code>R1 = new_rng(5); //5 is the seed
  R2 = new rng(5); //5 is the seed here, too.
  a = R1.random();
  b = R1.random();
  d = R2.random(); //a == d
  s1 = R2.get_state(); //save the state of R2
  e = R2.random(); //b == e
  R2.set_state(s1); //restore the state of R2
  f = R2.random(); //b == f
  </code></pre>
  
  <p>How do I do this?  Sometimes the RNGs will fork into different threads and I need to replicate the state of the RNG when creating a new thread, too.</p>