Why does each child process generate the same "random" number when using rand() in c? -


i trying spawn n child processes, let each child process request random number of resources. however, each child requests identical number of resources, though number changes each time run program.

/* create appropriate number of processes */ int pid; for(int = 0; < numberofprocesses; i++){     pid = fork();     if(pid < 0){         fprintf(stderr, "fork failed");         exit(1);     }     else if(pid == 0){         time_t t;         srand((unsigned) time(&t));          printf("child (%d): %d.", i+1, getpid());          /* generate random number [0, max_resources] of resources request */          int requestnum = rand() % (max_resources + 1);         printf(" requesting %d resources\n", requestnum);          exit(0);     }     else{ wait(null); } } 

update: following seems have solved issue. thank help, commented!

time_t t; srand((int)time(&t) % getpid()); 

you seeding random number generator current time. it's same time children. forking child processes, checking clock in parallel. whole point of parallelism multiple things @ same time.

from man time():

time() returns time number of seconds since epoch, 1970-01-01 00:00:00 +0000 (utc).

notice in seconds. second long time running process. if tried sequentially (not parallel) on , over, highly 2 processes ask time, , same result.

design better way seed random number generator based on unique each process. could, example, add process id of child seed (getpid(), not pid).


Comments

Popular posts from this blog

java - Suppress Jboss version details from HTTP error response -

gridview - Yii2 DataPorivider $totalSum for a column -

Sass watch command compiles .scss files before full sftp upload -