srand,rand函数的使用注意事项
2016-02-26 23:43
204 查看
在实际应用中,我们经常需要产生随机数,这些随机数的应用范围也是十分广泛的。但计算机只能依据一定算法产生伪随机数序列。c语言中最常用的产生伪随机数序列的函数是srand和rand
srand,rand函数在实现上利用TlsGetValue等一系列函数进行数据的存取,也就意味着srand,rand存取的数据是和线程相关的。
根据我使用经验,总结出以下几点注意事项:
1、rand函数初次使用之前必须调用srand函数初始化,才能保证产生不同的随机数序列。
2、在多线程程序中,如果每个线程都需要调用rand,那么必须在每个线程里单独进行初始化。
3、单进程的srand初始化,可以简单的采用time(0)即可,但是多线程中,如果每个线程的开始时间近乎相同,那么就不可采用time(0)进行初始化,因为time(0)实际精度只有s级,会导致每个线程产生相同的随机数序列,因此需要用每个线程各不相同的一个数去初始化srand,例如threadid等等
srand,rand函数在实现上利用TlsGetValue等一系列函数进行数据的存取,也就意味着srand,rand存取的数据是和线程相关的。
根据我使用经验,总结出以下几点注意事项:
1、rand函数初次使用之前必须调用srand函数初始化,才能保证产生不同的随机数序列。
2、在多线程程序中,如果每个线程都需要调用rand,那么必须在每个线程里单独进行初始化。
3、单进程的srand初始化,可以简单的采用time(0)即可,但是多线程中,如果每个线程的开始时间近乎相同,那么就不可采用time(0)进行初始化,因为time(0)实际精度只有s级,会导致每个线程产生相同的随机数序列,因此需要用每个线程各不相同的一个数去初始化srand,例如threadid等等
相关文章推荐
- 终于上传了一篇文章
- Introduction to the POM
- memcpy和memmove() 实现和区别
- memory order
- atitit.groovy 语法特性
- 2016/2/26 <marquee></marquee>实现多种滚动效果
- atitit.groovy 语法特性
- atitit.groovy 语法特性
- 一个很详细的web.xml配置文件详解
- 字符串处理之gets与scanf("%s")的区别
- Android 第一天重置版的一些技巧
- php 环境变量收集
- C 文件 简单整理 根据莫大学毕业项目写
- Lua的C++封装
- Opencv 图像叠加 添加水印
- Summary Ranges
- git 使用
- ZOJ Problem Set - 1002(DFS)
- Atitit避免出现空指针异常解决方案
- 中国移动短信网关错误代码汇总(完整版)