Random stability question: how is the thread RNG used for running $urandom, $urandom_range, array.shuffle and randcase

In reply to dave_59:

Thanks Dave. I really learnt a lot from your replies. Just now I designed some small tests on Questa and get confirmed about what your said. Here I also have found an interesting thing, about “shuffle”.

function automatic thread_0 ();

int xxx;
int yyy[$] = '{1, 2, 3, 4};
process p = process::self();

$display("YYY:",,,, p.get_randstate());

$display("do $urandom");
xxx = $urandom;
$display("YYY:",,,, p.get_randstate());

$display("do shuffle");
yyy.shuffle; $display(yyy);
$display("YYY:",,,, p.get_randstate());

$display("do shuffle");
yyy.shuffle; $display(yyy);
$display("YYY:",,,, p.get_randstate());

$display("do $urandom");
xxx = $urandom;
$display("YYY:",,,, p.get_randstate());

endfunction: thread_0

After observing the display output, I surprisingly saw that the yyy.shuffle never advanced thread RNG at all. This went beyond my imagination in another direction. However, this still kept random stable. :-)