我用系统时间作为种子,发现因为各个线程之间运行的时间差太小,所以产生的随机数还是相同的。网上有种方法可以用微秒级的时间作种子,但我没看懂,不知道谁能帮忙解释下不?或者有其他方法也欢迎提出。不过在srand前让线程sleep的方法就不需要了,因为我这里的情况要求线程之间要同时运行。
1、使用pthread库执行多线程,这个是Linux下的线程库 Windows下应该有自己的API,不过这种东西一般还是以Linux为标准。pthread_create()创建一个线程,传入fun()的函数指针就行了。然后这个Beep()的需求要进行线程间通信,可以用共享内存的方法,设一个bool变量flag共享,然后beep的时候设为false,beep完设成true。fun()里面每次看一下这个flag,是false的话就不做动作等下一秒,基本可以满足需求。
2、例程:
#include <pthread.h>用C语言如何实现多线程同时运行的情况下,各个线程输出不同的随机数?
1、使用pthread库执行多线程,这个是Linux下的线程库 Windows下应该有自己的API,不过这种东西一般还是以Linux为标准。pthread_create()创建一个线程,传入fun()的函数指针就行了。然后这个Beep()的需求要进行线程间通信,可以用共享内存的方法,设一个bool变量flag共享,然后beep的时候设为false,beep完设成true。fun()里...
c语言 产生一个随机数,如何让它每一次运行出现不同的随机数结果?
include "stdio.h"#include "stdlib.h"#include "time.h"int main(void){srand((unsigned)time(NULL)); int a;a=rand()%10;printf("%d\\n",a);}加一句srand((unsigned)time(NULL)); 打开随机触发器 与时钟频率同步 这样每次随机的数就不同 不过需要包含头文件 #include "time.h"...
c语言windows下写多线程的问题
因为你没有加同步互斥机制,所以如果没有足够的sleep的话,线程函数和main函数里的printf("%d\\n",pid);之间的顺序是未知的,视你的系统环境而定。比如我运行了几次,结果都不一样,有时候是只输出5个随机数,有时候和你的结果一样。如果加了足够的sleep,那么就可以确保在执行printf("%d\\n",pid)...
用C语言怎样产生10个不同的随机数
1、第一步,打开C语言编译器并创建一个新的初始.cpp文件,例如“test.cpp”,见下图,转到下面的步骤。2、第二步,执行完上面的操作之后,输入C语言代码,见下图,转到下面的步骤。3、第三步,执行完上面的操作之后,编译器运行test.cpp文件,执行结果见下图。这样,就解决了这个问题了。
C语言 如何产生1到52之间的不同的随机数
定义函数 int rand(void)函数说明 rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。关于随机数种子请参考srand()。返回值 返回0至RAND_MAX之间的随机数值,RAND_MAX定义在...
c语言怎么让每次运行使用的随机数种子都不一样
0):include <ctime> \/\/…srand((unsigned)time(0));for(int i=0;i<10;i++){ ran_num=rand() % 6;cout<<ran_num<<" ";} 第一次运行时输出:0 1 5 4 5 0 2 3 4 2 第二次:3 2 3 0 3 5 5 2 2 3 总之,每次运行结果将不一样,因为每次启动程序的时刻都不同 ...
怎样用多线程得到1-10的随机数,并且当数为7的时候停止线程,并且输出...
class Program { public static Thread t = null;static void Main(string[] args){ t = new Thread(new ThreadStart(Print));Console.WriteLine("线程启动");t.Start();t.Join();Console.WriteLine("线程结束!");Console.Read();} static void Print(){ while (true){ Random r = new ...
如何产生1000个从1到1000之间的不重复的随机数,用C语言实现!
define N 1000 \/* rand()产生一个伪随机数*\/ void main(){ int i=0,j,a[N]={-1},flag;while(i<N){ flag = 1 + N * rand()\/(RAND_MAX+1); \/*rand()\/RAND_MAX 该式表示所得到的是集合[0,1]中的随机数 若是使用rand()\/(RAND_MAX+1) 则可得到集合[0,1)中的随机数 1...
在C语言编程中,如何实现让电脑随机输出一1~9的整数?
rand()函数会返回一个伪随机数,但是这是通过一种数学公式推算出来的,得到的随机数分布太集中,这时候要使用srand()函数来设定产生随机数的种子,一般采用当前时间作为种子,这样可以得到分布比较均匀的伪随机数。rand(),srand()函数位于stdlib.h文件中,取得时间的time()函数位于time.h文件中。rand()%...
C语言如何产生一定范围内一定数量的不同随机数
include <stdbool.h> include <unistd.h> define a 16807\/\/or 48271 define m 2147483647 define q (m\/a)define r (m%a)static long int seed = 1;\/\/return rand long in [1,m]long int pm_rand(void){ long hi = seed \/ q;long lo = seed % q;long tmp = a * lo - r *...