2 Kasım 2016 Çarşamba

rand_r metodu

Giriş
Bu metod POSIX.1-2008 ile obsolete olmuştur ! Yeni kodlarda kullanmamak gerekir.

1. C'deki rand() metodunun tersine bu metod state verisini seed için verilen alanda saklar.

2. Normalde thread-safe değildir. Eğer her thread kendi seed bellek alanını sağlarsa bu metod thread-safe olarak kullanılabilir. Bu metod global state ile kullanılırsa thread-safe olmaz!

Örnek 1
rand() çağrısını kolayca myrand() ile değiştirmek istersek şöyle yaparız.
int myrand()
{
  static unsigned int myseed = ... some initialization of your choice ...;
  return rand_r (&myseed);
}
Örnek 2
Şöyle yaparız.
unsigned int seed = YOUR_INITIAL_SEED;

for (int x = 0; x < 100000; x++)
{
  unsigned int r = rand_r(&seed);
  ...
}

Hiç yorum yok:

Yorum Gönder