[fpc-devel] I get duplicate GUIDs under Linux
    Vinzent Höfler 
    JeLlyFish.software at gmx.net
       
    Mon Jun  2 20:11:16 CEST 2008
    
    
  
Vincent Snijders wrote:
> Klaus Hartnegg schreef:
>>> a call to randomize "disrupts" the current state of the random 
>>> generator. That means that if you use random outside guid creation, 
>>> creating a guid can have unintended side effects on your random 
>>> generation.
>>
>> Maybe the GUID generator should have an automatic call to randomize,
>> but use its own randseed (or preserve the original value):
>>
>> randseed_old := randseed;
>> if not guid_rnd_initialized then begin
>>    randomize;
>>    guid_rnd_initialized := true;
>> end
>> else
>>    randseed := guid_randseed;
>> result := rnd2guid(random);
>> guid_randseed := randseed;
>> randseed := randseed_old;
> 
> It is not that easy to restore the state of random number generator.
"Not that easy" is quite an understatement here. ;) It's very close to 
impossible without changing the System-unit. That was one issue I had. 
The other one was simple that System's RNG is not thread-safe, so I 
finally decided to use an RNG on a per object basis here.
This makes the necessary locking of a system wide RNG in threading 
context much easier and additionally I can still use a "deterministic" 
RNG in contexts where I need it, because now I can have as many 
"dedicated" RNGs as I like. :)
Maybe, such Random class should be incorporated in the FCL, too?
Vinzent.
    
    
More information about the fpc-devel
mailing list