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

uv

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

#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:线程安全是否意味着无锁?

如果一个类是线程安全的,那是否意味着我可以在不锁定它的情况下在多个线程中使用它的共享实例?

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

保罗·埃文斯

如果不需要每个线程的确定性序列,可以使用带有一个PRNG的使用锁。如果伪随机序列在不同运行期间的不同线程上不能不同,则对每个线程使用PRNG。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

GSL+OMP:C++ 中的线程安全随机数生成器

来自分类Dev

C ++随机数生成器

来自分类Dev

使用非线程安全的随机数生成器在C中为pi monte carlo纠正OpenMP编译指示

来自分类Dev

使用非线程安全的随机数生成器在C中为pi monte carlo纠正OpenMP编译指示

来自分类Dev

在C ++ 11中使用哪个伪随机数生成器?

来自分类Dev

C / C ++中随机数生成器的实现

来自分类Dev

C / C ++中随机数生成器的实现

来自分类Dev

C中的随机数生成器不接受再次播放的输入吗?

来自分类Dev

C ++快速正常随机数生成器

来自分类Dev

C(++)中的Stata随机数生成器

来自分类Dev

C:srand不影响随机数生成器

来自分类Dev

数组中的C ++随机数生成器

来自分类Dev

随机数生成器返回相同的值(C ++)

来自分类Dev

封装c ++随机数生成器

来自分类Dev

C++ 无重复随机数生成器

来自分类Dev

使用 C# 的随机数生成器

来自分类Dev

C程序中的随机数生成器未生成正确的随机数

来自分类Dev

C ++线程安全的均匀分布随机数生成

来自分类Dev

C ++随机数生成器不是随机运行的

来自分类Dev

C ++随机数生成器:如何在每次执行时使数字随机

来自分类Dev

C随机数生成器有时会生成相同的数字

来自分类Dev

在C中添加由随机数生成器生成的数字

来自分类Dev

C随机数生成器有时会生成相同的数字

来自分类Dev

如何在C#中保存随机数生成器的状态?

来自分类Dev

C#随机数生成器每次仍给出相同的数字

来自分类Dev

避免使用相同的随机数和相同的生成器<random> c ++ 11

来自分类Dev

C ++随机数生成器,允许用户选择范围

来自分类Dev

C#随机数生成器是否保证稳定?

来自分类Dev

如何在C#中保存随机数生成器的状态?

Related 相关文章

热门标签

归档