gpt4 book ai didi

C++ 伪随机数生成器线程安全吗?

转载 作者:行者123 更新时间:2023-11-30 03:46:23 25 4
gpt4 key购买 nike

Q1:伪随机数生成器线程安全吗?我可以在多个线程中使用共享生成器吗?

#include "stdafx.h"
#include <iostream>
#include <thread>
#include <random>
#include <math.h>
using namespace std;
random_device seed;//Should I use thread_local here?
default_random_engine engine(seed());//Should I use thread_local here?
int random_int(int x, int y)
{
binomial_distribution<int> distribution(y - x);
return distribution(engine) + x;
}
int a[10],b[10],c[10];
void thread_task() {
for (int i = 0; i < 10; i++)
{
a[i] = random_int(1, 8);
}
}
void thread_task1() {
for (int i = 0; i < 10; i++)
{
b[i] = random_int(1, 8);
}
}
void thread_task2() {
for (int i = 0; i < 10; i++)
{
c[i] = random_int(1, 8);
}
}
int main()
{
thread t(thread_task);
thread t1(thread_task1);
thread t2(thread_task2);
t.join();
t1.join();
t2.join();
for (int i = 0; i < 10; i++)
cout << a[i] << " ";
cout << endl;
for (int i = 0; i < 10; i++)
cout << b[i] << " ";
cout << endl;
for (int i = 0; i < 10; i++)
cout << c[i] << " ";
cout << endl;
getchar();
return 0;
}

result 1:
7 4 4 3 7 5 4 4 4 4
5 4 4 7 2 3 6 5 4 7
4 4 4 6 1 6 3 5 3 4 //seems fine.
result 2:
5 3 5 6 3 4 5 5 3 5
5 6 5 6 8 3 5 7 3 2
4 6 4 5 4 4 4 3 6 7 //still works fine.

Q2:线程安全是否意味着无锁?

如果一个类是线程安全的,那么这是否意味着我可以在多个线程中使用它的共享实例而无需锁定它?

Q3:我既没有使用锁也没有使用thread_local关键字,它仍然为不同的线程生成不同的整数序列,那么锁有什么用呢?

最佳答案

如果您不需要每个线程的确定性序列,可以将锁与一个 PRNG 一起使用。如果伪随机序列在不同线程的不同运行中不能不同,则每个线程使用 PRNG。

关于C++ 伪随机数生成器线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34115414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com