5

POSIX システムで大きな負でない整数のランダム値を生成しようとしています。法案に適合する2つの可能な関数と、それぞれの初期化子を見つけました。

       #include <stdlib.h>

       long int random(void);    
       void srandom(unsigned int seed);
CONFORMING TO
       4.3BSD, POSIX.1-2001.

       // and

       long int lrand48(void);
       void srand48(long int seedval);    
CONFORMING TO
       SVr4, POSIX.1-2001.
  1. どの関数が優先されますか (スレッドセーフと生成される値の範囲)?
  2. セキュリティが問題ではないことを考えると、どのようにそれらをシードする必要がありますか?
  3. long intシード関数 ( vs. )の引数が異なるため、シード メソッドは異なる必要がありますunsigned intか?
4

1 に答える 1

4

nrand48と同じ範囲を持ち、シードとして使用lrand48される配列へのポインタを受け取ります。このスレッドをローカルにすると、スレッドの安全性が確保されます。(補足として、glibc の実装にはいくつかの問題があるようです。詳細については、 http://evanjones.ca/random-thread-safe.htmlを参照してください。このページには、スレッドセーフな乱数生成関数の概要も含まれています。 )

于 2011-01-31T12:27:55.280 に答える