title: Correct way to use Random in multithread application
body: <p>Ok. Here is what I know that won't work:</p>
  
  <pre><code>int Rand()
  {
      //will return the same number over and over again
      return new Random().Next();
  }
  
  static Random rnd=new Random();
  
  int Rand()
  {
      //if used like this from multiple threads, rnd will dissintegrate 
      //over time and always return 0
      return rnd.Next();
  }
  </code></pre>
  
  <p>This will work correctly, but if used by multiple threads, the CPU usage goes way up, which I don't want, and which I think is not necessary:</p>
  
  <pre><code>int Rand()
  {
      lock(rnd)
      {
          return rnd.Next();
      }
  }
  </code></pre>
  
  <p>So, is there a thread-safe Random class for c#, or a better way to use it?</p>