генератор случайных чисел - PullRequest
2 голосов
/ 03 марта 2010

Мне нужна помощь, чтобы генератор случайных чисел использовать одновременно из нескольких потоков и получить меньше времени выполнения

1 Ответ

1 голос
/ 03 марта 2010

Практически любой генератор случайных чисел имеет некоторое сохраненное состояние. Чтобы получить правильное поведение при вызове из нескольких потоков, ему придется либо использовать локальное хранилище потока для своего сохраненного состояния, либо использовать синхронизированный доступ к сохраненному состоянию.

Если он использует синхронизированный доступ к общему состоянию, это обычно будет довольно медленно.

Если он использует локальное хранилище потоков, это создает дополнительную проблему, заключающуюся в том, что каждый поток, который его использует, должен заполнять генератор отдельно, и гарантируют, что начальные значения не совпадают (например, если вы используете как правило, srand(time(NULL)) в каждом потоке, очень высоки шансы, что несколько потоков получат одинаковое начальное число и выдают одинаковую последовательность выходных данных. Однако после того, как вы посеете его разумно, вызовы, как правило, будут достаточно быстрыми - единственное сравнение к однопоточному (возможно) имеет уровень косвенности, чтобы попасть в поток локального хранилища.

...