| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/06/2008 14:43:07
|
Diogo Cabral
Thread.start()
![[Avatar]](/images/avatar/82077c274c8b1917a195adc43f641529.png)
Membro desde: 22/06/2006 12:05:33
Mensagens: 44
Localização: Maceió - AL
Offline
|
Olá,
Sempre utilizei a função srand utilizando time(0) ou time (NULL) como parâmetro. Quando precisei criar mais de um processo no mesmo segundo, os números gerados pela função rand() são os mesmo quando comparados com os gerados pelos outros processos. Até aí tudo bem, o time vai ter o mesmo valor para todos os processos.
Qual a maneira adequada de inicializar srand()?
Encontrei o código abaixo na internet: (Infelizmente não achei muito legal)
|
diogocabral.com |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/06/2008 16:15:32
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Se você quer ser realmente chato em termos de gerar números aleatórios, pode usar o OpenSSL, que faz as seguintes coisas:
- Chama o gerador de números aleatórios do sistema operacional, caso disponível (/dev/random no Linux, CryptGenRandom no Windows);
- Usa um monte de outras coisas (como no Windows a listagem dos PIDs e outras coisas mais estranhas).
OpenSSL RAND
O problema de você usar o tempo, é óbvio, é que mesmo tv.tv_usec não é muito legal (na verdade, muitos sistemas operacionais não conseguem garantir precisão melhor que 10 milissegundos). Mas pode até ser tolerável, para efeitos de simulação; não é tolerável para efeitos criptográficos.
|
|
|
 |
|
|
|
|