Jonas Maebe wrote:
Also: the entire state of the random number generator consists of
regular global variables, so it is not safe to use it from multiple
threads in parallel.
Would it make sense to you to make random thread-safe? E.g. with the
use of "threadvar" instead of "var" for the global variables in question?
No. The Mersenne twister has a lot of state (about 2KB). Duplicating
this for every thread, along with associated slowdown, is not worth it.
It's better to use a class that encapsulates the state of a random
number generator and then instantiate this class for every thread.
Could I ask for clarification of this please. Are you saying that
Random() will crash if called simultaneously by multiple threads, or
that it will return suboptimal results?
If, as an example, I have two threads doing network or comms jobs and I
want to introduce jitter in the retries, does that mean that I have to
put Random() into a critical section?
--
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk
[Opinions above are the author's, not those of his employers or colleagues]
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel