So, is the granularity that of seq realization -- individual [first & rest] cells for (iterate inc 0), single chunks for (range), etc.? I'd appreciate a straight, direct, yes-or-no answer to that question.
On Mon, Jun 24, 2013 at 11:03 PM, Timothy Baldridge <tbaldri...@gmail.com>wrote: > It corresponds to the execution of the LazySeq fn. That fn will be called > once and only once, the rest of the data in the object is immutable and > side-effect free and therefore does not need to be synchronized. > > Timothy > > > On Mon, Jun 24, 2013 at 8:51 PM, Cedric Greevey <cgree...@gmail.com>wrote: > >> I'm familiar with what "synchronized Type foo (args)" does -- my last >> question was more about what aspect of a lazy seq the object with the >> method corresponds to. Cons cell or similar subunit? I could read half of >> clojure.lang, learn how all the various types of seq (Cons, LazySeq, >> ChunkedSeq, etc...) work under the hood, and thereby eventually figure it >> out, but it's probably a lot fewer man-hours of work for me to ask someone >> who's already intimately familiar with that codebase and for him to >> answer... >> >> >> >> On Mon, Jun 24, 2013 at 10:32 PM, Timothy Baldridge <tbaldri...@gmail.com >> > wrote: >> >>> Reading the LazySeq.java file should make this all clear, but yes, no >>> race conditions. >>> >>> >>> https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/LazySeq.java#L37 >>> >>> Synchronized methods basically lock the current instance of the object >>> while the method runs, so it is impossible for two threads to execute the >>> lazy seq fn at the same time. >>> >>> Timothy >>> >>> >>> On Mon, Jun 24, 2013 at 4:17 PM, Cedric Greevey <cgree...@gmail.com>wrote: >>> >>>> Ah, thanks. The locking granularity is local to the cons cell (or >>>> analogue; first/rest pair) being realized, I hope? So one thread actually >>>> calculates an element and neither call returns until it's calculated, and >>>> then both promptly return the calculated value, but threads realizing other >>>> lazy seqs or crawling along earlier parts of the same one don't get >>>> blocked? (And given they can share tails, how would "same one" even be >>>> defined anyway?) >>>> >>>> >>>> On Mon, Jun 24, 2013 at 5:56 PM, Nicola Mometto <brobro...@gmail.com>wrote: >>>> >>>>> >>>>> Realizing a lazy-seq is done through a synchronized method see: >>>>> >>>>> https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/LazySeq.java#L37 >>>>> >>>>> No race conditions. >>>>> >>>>> Cedric Greevey writes: >>>>> >>>>> > What, precisely, happens if two threads sharing a reference to a >>>>> single >>>>> > lazy sequence try to realize the same element at the same time? If >>>>> the >>>>> > sequence is completely pure and deterministic, so any attempt to >>>>> realize a >>>>> > particular element will produce a single particular value >>>>> consistently >>>>> > (unlike, say, (repeatedly rand) or a file-seq where relevant parts >>>>> of the >>>>> > filesystem are being concurrently modified), is the worst-case >>>>> scenario >>>>> > that the two threads will redundantly perform the same calculation, >>>>> with no >>>>> > effect other than a minor hit to performance and, in particular, no >>>>> effect >>>>> > on the program semantics? >>>>> > >>>>> > -- >>>>> >>>>> -- >>>>> -- >>>>> 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 >>>>> Note that posts from new members are moderated - please be patient >>>>> with your first post. >>>>> To unsubscribe from this group, send email to >>>>> clojure+unsubscr...@googlegroups.com >>>>> For more options, visit this group at >>>>> http://groups.google.com/group/clojure?hl=en >>>>> --- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Clojure" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to clojure+unsubscr...@googlegroups.com. >>>>> For more options, visit https://groups.google.com/groups/opt_out. >>>>> >>>>> >>>>> >>>> -- >>>> -- >>>> 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 >>>> Note that posts from new members are moderated - please be patient with >>>> your first post. >>>> To unsubscribe from this group, send email to >>>> clojure+unsubscr...@googlegroups.com >>>> For more options, visit this group at >>>> http://groups.google.com/group/clojure?hl=en >>>> --- >>>> You received this message because you are subscribed to the Google >>>> Groups "Clojure" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to clojure+unsubscr...@googlegroups.com. >>>> For more options, visit https://groups.google.com/groups/opt_out. >>>> >>>> >>>> >>> >>> >>> >>> -- >>> “One of the main causes of the fall of the Roman Empire was that–lacking >>> zero–they had no way to indicate successful termination of their C >>> programs.” >>> (Robert Firth) >>> >>> -- >>> -- >>> 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 >>> Note that posts from new members are moderated - please be patient with >>> your first post. >>> To unsubscribe from this group, send email to >>> clojure+unsubscr...@googlegroups.com >>> For more options, visit this group at >>> http://groups.google.com/group/clojure?hl=en >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "Clojure" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to clojure+unsubscr...@googlegroups.com. >>> For more options, visit https://groups.google.com/groups/opt_out. >>> >>> >>> >> >> -- >> -- >> 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 >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+unsubscr...@googlegroups.com >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en >> --- >> You received this message because you are subscribed to the Google Groups >> "Clojure" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> > > > > -- > “One of the main causes of the fall of the Roman Empire was that–lacking > zero–they had no way to indicate successful termination of their C > programs.” > (Robert Firth) > > -- > -- > 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 > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- -- 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 Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.