Имеет ли каждый поток свою собственную копию prng `rand()`?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Имеет ли каждый поток свою собственную копию prng `rand()`?

Сообщение Anonymous »

Я экспериментировал с простым кодом C++ для экзаменационного вопроса по многопоточности, где потоки вызывали rand() (и да, я знаю, что есть веские причины использовать другие генераторы, но хотел пусть экзаменационные вопросы будут простыми и конкретными). Код использовал srand() для заполнения prng перед созданием потоков, но я был удивлен, заметив, что каждый поток получал одну и ту же последовательность чисел из prng (независимо), как если бы он не был заполнен. (или, скорее, с начальным значением 1, как это установлено по умолчанию). Только когда я начал заполнять prng в каждом потоке, последовательность изменилась.
Я знаю, что rand() не является потокобезопасным, поэтому я не совсем уверен в этом. удивлен тем, что все потоки получат одну и ту же последовательность (поскольку я предполагаю, что генератору потребуется некоторая синхронизация кэша, чтобы избежать этого), но я удивлен, что заполнение prng в хост-процессе перед созданием потоков, похоже, не оказывает никакого влияния на последовательность.
Например, в комментарии к вопросу:
Темы, как самостоятельно засеять генератор случайных чисел?
говорится, что «не следует задайте свой генератор в потоках. Задайте его перед запуском любого потока. Генератор, который вы используете с rand() и srand(), уникален для всей программы."
Итак, мой вопрос: это:
Получает ли каждый поток отдельную копию генератора или почему ее заполнение в хост-процессе не влияет на последовательность?
Следует минимальный пример кода, воспроизводящий проблему. .
Я знаю, что это не очень хорошие семена или передовая практика, но это демонстрирует то, о чем я говорю.
Когда я запускаю это (вообще без раздачи):< /p>

Код: Выделить всё

#include 
#include 
#include 
#include 

using namespace std;

void test(int id, mutex &channel)
{
// srand(id);

channel.lock();
cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/78473492/does-each-thread-have-its-own-copy-of-the-rand-prng[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»