C++11 Thread-Sicherheit von Zufallsgeneratoren

In C++11 gibt es eine Reihe neuer Random number generator-Motoren und-Verteilung Funktionen. Sie sind thread-sicher? Wenn Sie teilen sich eine einzige zufällige Verteilung und Motor zwischen mehreren threads, ist es sicher und wird Sie noch erhalten Zufallszahlen? Das Szenario, das ich Suche ist so etwas wie,

void foo() {
    std::mt19937_64 engine(static_cast<uint64_t> (system_clock::to_time_t(system_clock::now())));
    std::uniform_real_distribution<double> zeroToOne(0.0, 1.0);
#pragma omp parallel for
    for (int i = 0; i < 1000; i++) {
        double a = zeroToOne(engine);
    }
}

Verwendung von OpenMP oder

void foo() {
    std::mt19937_64 engine(static_cast<uint64_t> (system_clock::to_time_t(system_clock::now())));
    std::uniform_real_distribution<double> zeroToOne(0.0, 1.0);
    dispatch_apply(1000, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^(size_t i) {
        double a = zeroToOne(engine);
    });
}

mit libdispatch.

InformationsquelleAutor user1139069 | 2012-01-11
Schreibe einen Kommentar