Ok. Hier ist, was ich weiß, dass nicht funktionieren:Korrekte Art, Random in Multithread-Anwendung zu verwenden
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();
}
Diese korrekt funktionieren, aber wenn von mehreren Threads verwendet wird, geht die CPU-Auslastung Weg nach oben, die ich nicht will, und was ich denke, ist nicht notwendig:
int Rand()
{
lock(rnd)
{
return rnd.Next();
}
}
Also, gibt es eine Thread-safe Random-Klasse für C#, oder eine bessere Möglichkeit, es zu verwenden?
Probieren Sie eine 'ThreadLocal'. 'private static readonly ThreadLocal rand = neu ThreadLocal (() => neu Random());' –
@JeroenVannevel: Wahrscheinlich wollen Sie die Samen der 'Random'-Instanzen zufallsgenerieren, da sonst Threads zur gleichen Zeit starten würde die gleiche Folge von Zufallszahlen bekommen. – dtb
.. und nehmen Sie eine globale gesperrte statische Zufallsinstanz für den Seed der zufälligen ThreadLocal-Instanzen. – Ralf