This has nothing to do with threads. Check this out:
----------
#include <stdio.h>
#include <gsl/gsl_rng.h>
int main (void)
{
const gsl_rng_type * T;
gsl_rng *r1, *r2, *r3;
int i, n = 10;
gsl_rng_env_setup();
T = gsl_rng_ranlxs0;
r1 = gsl_rng_alloc(T);
r2 = gsl_rng_alloc(T);
r3 = gsl_rng_alloc(T);
gsl_rng_set(r1,0);
gsl_rng_set(r2,1);
gsl_rng_set(r3,2);
for (i = 0; i < n; i++)
{
double u1 = gsl_rng_uniform (r1);
double u2 = gsl_rng_uniform (r2);
double u3 = gsl_rng_uniform (r3);
printf ("%.11f %.11f %.11f\n", u1,u2, u3);
}
gsl_rng_free (r1);
gsl_rng_free (r2);
gsl_rng_free (r3);
return 0;
}
----------
Compile and run:
----------
$ gcc gslrngtest.c -lgsl -o gslrngtest
$ ./gslrngtest
0.32085895538 0.32085895538 0.16047435999
0.49408543110 0.49408543110 0.24704271555
0.70446860790 0.70446860790 0.35229921341
0.81177759171 0.81177759171 0.40588879585
0.65004783869 0.65004783869 0.32499593496
0.75581908226 0.75581908226 0.87790954113
0.16959655285 0.16959655285 0.08471691608
0.24530410767 0.24530410767 0.12265205383
0.18674021959 0.18674021959 0.59334981441
0.62624281645 0.62624281645 0.31312137842
$
----------
My guess as to why the first two columns are the same is based on this
quote from the docs:
"If the seed s is zero then the standard seed from the original
implementation is used instead."
Perhaps the "standard seed from the original implementation" of ranlxs0
algorithm is 1.
Warren