It was already mentioned that it is important to use independent streams.
Which is not guaranteed if you, e.g., use the naive approach of just seeding each of your PRNG with a different number.
However, for Mersenne-Twister there exists a special implementation called Dynamic Creator where it is possible to draw seeds that give some guarantees regarding independence of the generated random numbers:
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/DC/dc.html
(Note: The next two sections describe techniques that I am quite sure are also used in the mentioned Library (SPRNG), but its also easy to just implement them with other frameworks, e.g., using the generators from the STL in C++.)
If you know how many independent streams and how many random numbers you need (which one usually does) you can use jump ahead for fast skipping of numbers accordingly. So if you want N random numbers per stream you initialize each stream with the same seed and skip 0, N, 2*N, ... numbers.
Last but not least you can generate N_cores*N_numbers random numbers and divide them up into packages of N_numbers numbers for your according cores / threads. (This is called Leapfrogging)
However, this can be problematic if you draw many numbers, as autocorellation within the single stream will become corellation between the thus generated "parallel streams".
PS: In the blog article Finding the Best 64-bit Simulation PRNG a detailed overview regarding which PRNGs to use in practice is given (implementations in C)
PPS: I know this question is old. Yet, the last time I searched around regarding this subject it would have been nice to find at least some more detailed answers then use framework X ^^ so hopefully this is useful to someone.