[armedbear-devel] [RFC] Support for 'synchronized' blocks in Lisp code
Ville Voutilainen
ville.voutilainen at gmail.com
Tue Jul 7 22:59:01 UTC 2009
On Wed, Jul 8, 2009 at 12:36 AM, Anton Vodonosov<avodonosov at gmail.com> wrote:
> Note, btw, that "synchronized" in java is not only about locking, but
> also about memory synchronization: the code in the synchronized block
> is compiled so that other threads see the changes it has made to
> memory and it sees changes from other threads too. Compiler doesn't
> cache values in registers or other temporary places.
I just read
http://java.sun.com/docs/books/tutorial/essential/concurrency/syncmeth.html
Which says
"Second, when a synchronized method exits, it automatically
establishes a happens-before relationship with any subsequent
invocation of a synchronized method for the same object. This
guarantees that changes to the state of the object are visible to all
threads. "
The memory changes are committed (just) before a synch block exits.
Not necessarily during the
block. Thus I think the caching is allowed. That thought is further supported by
http://java.sun.com/docs/books/tutorial/essential/concurrency/memconsist.html
Of course I may be wrong - but I'd be somewhat surprised if all memory
memory access is volatile
(in the C sense) during a synchronized block. That would take an
enormous perf hit on multi-cpu
systems with IPIs and such.
More information about the armedbear-devel
mailing list