栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

线程安全的随机数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线程安全的随机数

Microsoft .NET Framework 内部实现的随机数算法重复率很低,但也意味着需要消耗更多的CPU,并且如果一个线程上面持续使用相同随机数对象实例,会导致陷入随机数获取的死循环,C/C++ 自己从.NET框架摘要的C#翻译为C++的实现还能自己去控制一下防止死循环,但用C#直接用这个对象就有危险了,当然单个随机实例重复用不多,不会掉死循环里面去。

int server_random_r(volatile unsigned int* seed) {
    unsigned int next = *seed;
    int result;

    next *= 1103515245;
    next += 12345;
    result = (unsigned int)(next / 65536) % 2048;

    next *= 1103515245;
    next += 12345;
    result <<= 10;
    result ^= (unsigned int)(next / 65536) % 1024;

    next *= 1103515245;
    next += 12345;
    result <<= 10;
    result ^= (unsigned int)(next / 65536) % 1024;

    *seed = next;
    return result;
}

int server_random(int min, int max) {
    static volatile unsigned int seed = time(NULL);

    int v = server_random_r(&seed);
    return v % (max - min + 1) + min;
}

int server_random_ascii() {
    static Byte x_[] = { 'a', 'A', '0' };
    static Byte y_[] = { 'z', 'Z', '9' };

    int i_ = server_random() % 3;
    return server_random(x_[i_], y_[i_]);
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034171.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号