Srand(time(NULL)) => probleme de fork
batmat
Messages postés
1871
Date d'inscription
Statut
Membre
Dernière intervention
-
jojo -
jojo -
J'ai un probleme de graine pseudo aléatoire : lorsque je forke, les processus fils doivent attendre un certain temps, or comme ils sont forkés en meme temps, meme en commencant par srand(time(NULL)); ca génère la meme graine, donc ca m'énerve parce que les fils attendent le meme temps et ce n'est absolument pas ce que je veux !!! ;-)
Quelqu'un aurait une solution ?
------------------------
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
Quelqu'un aurait une solution ?
------------------------
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
A voir également:
- Srand (time(null))
- Popcorn time - Télécharger - TV & Vidéo
- Finish time lite - Télécharger - Utilitaires
- Quick time - Télécharger - Lecture
- Salat time - Télécharger - Agendas & Calendriers
- Face time - Guide
4 réponses
il faut utiliser la fonction wait()
ou un select avec tous les paramatres a NULL sauf le dernier ou tu mets le temps en seconde que tu veux attendre
ou un select avec tous les paramatres a NULL sauf le dernier ou tu mets le temps en seconde que tu veux attendre
1 ) seed en anglais, ca veut dire graine,
pour générer un nombre"pseudo-aléatoire", en général on prend la graine time(NULL) tout simplement parce qu'elle change tout le temps
=> srand(time(NULL))
2) wait ca serait pas plutot pour attendre la mort d'un fils ? tu veux plutot dire sleep je pense ? select je ne connais pas
@+
-------------------
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
pour générer un nombre"pseudo-aléatoire", en général on prend la graine time(NULL) tout simplement parce qu'elle change tout le temps
=> srand(time(NULL))
2) wait ca serait pas plutot pour attendre la mort d'un fils ? tu veux plutot dire sleep je pense ? select je ne connais pas
@+
-------------------
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
Tu as plusieurs fils je suppose ???
Tu initialises le Rand, dans le code du(des) fils ou pas avant de Forker ?
Sinon tu pourrais essayer d'initialiser ton Srand avec le PID du fils créé, ça te ferais une base pseudo-aléatoire pour ton temps...
A essayer. Je vois rien d'autre pour l'instant mais je vais y réfléchir
parce-que c'est effectivement un bon sujet de casse-tête.
Ciao bon courage. BigBen.
Tu initialises le Rand, dans le code du(des) fils ou pas avant de Forker ?
Sinon tu pourrais essayer d'initialiser ton Srand avec le PID du fils créé, ça te ferais une base pseudo-aléatoire pour ton temps...
A essayer. Je vois rien d'autre pour l'instant mais je vais y réfléchir
parce-que c'est effectivement un bon sujet de casse-tête.
Ciao bon courage. BigBen.
seeder = initialiser le générateur de nombres aléatoire avec une graine (seed).
Mais il n'y a pas un device sous Unix qui fourni des données aléatoires ? (/randpool ou quelquechose comme ça ?)
ça serait déjà mieux que le rand() du C.
Mais il n'y a pas un device sous Unix qui fourni des données aléatoires ? (/randpool ou quelquechose comme ça ?)
ça serait déjà mieux que le rand() du C.
si : /dev/random fournit des données temps réel proche de l'idéal aléatoire : le systeme fait des prises d'états des periphériques à plusieurs instants t, un truc marrant à essayer, tu fais cat /dev/random
c un fichier qui se génère tps réel (comme je viens de le dire :-) si tu ne touche à rien , tu vois que ca s'arrete puis que ca repart (idle se lance par exemple)
=> ce fichier est génial pour les besoins d'acces aléatoires
un autre fichier un peu moins aléatoire est /dev/urandom il marche un peu differement, c pour le cas ou tes données aléatoires doivent arriver un peu moins de facon saccadée comme /dev/random (genre pour un jeu par exemple, les ralentissements seraient chiants ;-)
Voila ce que je sais :-))
Pour ceux que le pb interesse, en fait j'en ai besoin parce qu'en ce moment je programme des sémaphores et des variables partagées
=> N processus ont un RDV ... mais pour les faire démarrer dans un ordre aléatoire, et qu'ils n'attendent pas le meme temps, c la le pb :-)
merci à tous
@+
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
c un fichier qui se génère tps réel (comme je viens de le dire :-) si tu ne touche à rien , tu vois que ca s'arrete puis que ca repart (idle se lance par exemple)
=> ce fichier est génial pour les besoins d'acces aléatoires
un autre fichier un peu moins aléatoire est /dev/urandom il marche un peu differement, c pour le cas ou tes données aléatoires doivent arriver un peu moins de facon saccadée comme /dev/random (genre pour un jeu par exemple, les ralentissements seraient chiants ;-)
Voila ce que je sais :-))
Pour ceux que le pb interesse, en fait j'en ai besoin parce qu'en ce moment je programme des sémaphores et des variables partagées
=> N processus ont un RDV ... mais pour les faire démarrer dans un ordre aléatoire, et qu'ils n'attendent pas le meme temps, c la le pb :-)
merci à tous
@+
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?