Ich habe eine Schleife in meinem Codewie zum Wechselstrom # threadsicher Zufallszahlengenerator
Parallel.For(0, Cnts.MosqPopulation, i => { DoWork() });
jedoch in der DoWork()
Funktion gibt es mehrere Anrufe zu einem Zufallszahlengenerator herzustellen, die wie folgt definiert ist:
public static class Utils
{
public static readonly Random random = new Random();
}
Es ist statische Instanz, so dass es nur einmal gesetzt wird. Und ich kann es im gesamten Code verwenden.
Laut MSDN und anderen Stackoverflow-Threads ist dies nicht threadsicher. Tatsächlich habe ich manchmal bemerkt, dass mein Code bricht und der Zufallszahlengenerator beginnt, alle Nullen zu erzeugen (gemäß der MSDN-Dokumentation).
Es gibt andere stackoverflow-Threads, aber sind ziemlich alt und die Implementierung ist langsam. Ich kann es mir nicht leisten, beim Generieren der Zahlen Zeit zu verlieren, da das Programm eine wissenschaftliche Berechnung ist und Hunderte von Simulationen durchführt.
Ich habe seit 2.0 Tagen nicht mehr mit .net gearbeitet und bin mir nicht sicher, wie sich die Sprache entwickelt hat, um einen schnellen, effizienten und threadsicheren RNG zu erstellen.
Hier sind die bisherigen Themen:
Is C# Random Number Generator thread safe?
Correct way to use Random in multithread application
Fast thread-safe random number generator for C#
Hinweis: weil ich eine schnelle Implementierung benötigen, kann ich nicht die RNGCryptoServiceProvider
verwenden, die eher langsam ist.
Anmerkung2: Ich habe keinen minimalen Arbeitscode. Ich weiß nicht einmal, wo ich anfangen soll, da ich nicht weiß, wie Thread-Sicherheit funktioniert oder hohes Wissen über C# hat. Es scheint also, als ob ich nach einer vollständigen Lösung frage.
Warum sind die Lösungen in den Beiträge zu erstellen, die Sie nicht für Sie geeignet verlinken ? Irgend ein bestimmter Grund? –
Einige von ihnen sind wirklich nicht Thread-Safe wie in ihren Kommentaren. Die anderen sind zu langsam. Ich hatte gehofft, dass es eine * moderne * Version der vorherigen Antworten gibt. – masfenix
Also wie wäre es mit diesem: http://Stackoverflow.com/a/19271062/40347 –