Thanks. That does appear to provide the guarantee I was looking for. > On Jun 9, 2015, at 12:14 PM, Andy Fingerhut <andy.finger...@gmail.com> wrote: > > swap! is implemented using Java's AtomicReference class and its compareAndSet > method. I haven't dug into the Java source code implementing that class, but > you can read the Java documentation for all Atomic* Java classes here: > > https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/package-summary.html > > The summary there is that all accesses to Atomic* classes should have similar > memory model guarantees as Java fields declared volatile. I don't have a > good authoritative link handy for Java documentation on volatile, but the > basic idea is that they should not be cached locally by individual threads, > but be visible to all. > > Andy > > > On Tue, Jun 9, 2015 at 11:33 AM, Michael Gardner <gardne...@gmail.com> wrote: > I'm talking about a scenario where a single thread does inc, followed shortly > by dec. Obviously from that thread's perspective, the value will never be > zero, but what about as seen by other threads? > > My understanding of Java's memory model is that instructions within a single > thread *can* get reordered, and Java only guarantees that they will *appear* > to have executed in order from the perspective of the executing thread. Other > threads might see those instructions as executing out-of-order. What I'm > wondering is whether atoms are subject to this as well. > > > On Jun 9, 2015, at 10:16 AM, Andy Fingerhut <andy.finger...@gmail.com> > > wrote: > > > > I am not sure why Atamert says "No". > > > > If the (swap! a inc) and (swap! a dec) are executed in different threads, > > and they can occur in either order because there is no synchronization > > between those threads that prevents one of the two possible orders from > > occurring, then another thread *could* see a value of 0, if and when the > > (swap! a dec) occurs first. > > > > If the (swap! a inc) and (swap! a dec) are executed sequentially in a > > single thread, and no other thread is modifying a, then by normal > > sequential execution the atom should change from 1 to 2, then from 2 back > > to 1. > > > > Andy > > > > On Tue, Jun 9, 2015 at 9:38 AM, Atamert Ölçgen <mu...@muhuk.com> wrote: > > > > > > On Tue, Jun 9, 2015 at 7:30 PM, Michael Gardner <gardne...@gmail.com> wrote: > > This might be blindingly obvious to some, but I can't find any discussion > > about it. Let's say I have code like the following: > > > > (def a (atom 1)) > > ... > > (swap! a inc) > > (swap! a dec) > > > > Is there any possibility of another thread seeing a=0? If not, what > > provides this guarantee? > > > > No. Not if those two swap! calls are made from different threads. > > > > > > -- > > 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/d/optout. > > > > > > > > -- > > Kind Regards, > > Atamert Ölçgen > > > > ◻◼◻ > > ◻◻◼ > > ◼◼◼ > > > > www.muhuk.com > > www.olcgen.com > > > > -- > > 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/d/optout. > > > > > > -- > > 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/d/optout. > > -- > 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/d/optout. > > > -- > 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/d/optout.
-- 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/d/optout.