nextDouble calls next, which according to Java 5 docs is:

synchronized protected int next(int bits) {
        seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
        return (int)(seed >>> (48 - bits));
  }

This is exactly the kind of thing I think we shouldn't have to worry  
about in Clojure.

Stuart

> Looks like the only synchronization is for lazy initialization of the
> instance of Random used by the static method:
>
> public final class Math {
>
>    private static Random randomNumberGenerator;
>
>    private static synchronized void initRNG() {
>        if (randomNumberGenerator == null)
>            randomNumberGenerator = new Random();
>    }
>
>    public static double random() {
>        if (randomNumberGenerator == null) initRNG();
>        return randomNumberGenerator.nextDouble();
>    }
>
> }
>
> public class Random implements java.io.Serializable {
>    public Random() { this(++seedUniquifier + System.nanoTime()); }
>    private static volatile long seedUniquifier = 8682522807148012L;
>
>    public double nextDouble() {
>        long l = ((long)(next(26)) << 27) + next(27);
>        return l / (double)(1L << 53);
>    }
> }
>
> On Dec 2, 12:04 am, Stuart Halloway <[EMAIL PROTECTED]> wrote:
>> Clojure's rand delegates to Java's Math.random(), which I am pretty
>> sure has a synchronized block in it.
>>
>> One problem with living on top of Java is calling into methods that
>> have no (conceptual) need to be synchronized. This could hurt
>> performance in an app carefully written in Clojure to avoid mutable
>> state and locking. Since unsynchronized PRNGs exist, I would suggest
>> we modify rand to use one. (I am willing to take the lead on writing
>> one in Clojure if needed.)
>>
>> Thoughts?
>>
>> Stuart
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to