RE: JavaMemoryModel: Guaranteed semantics for Thread.yield()

From: Jerry Schwarz (jschwarz@us.oracle.com)
Date: Mon Dec 31 2001 - 14:19:44 EST


At 09:18 AM 12/31/2001, Bill Pugh wrote:
>At 4:23 PM +0000 12/31/01, Roly Perera wrote:
>>Could someone humour me and outline (or point me to) the theory behind
>>this?
>>
>>What I'm unclear about is the meaning of the claim that example 1
>>terminates "eventually". How long does one have to wait to be sure that
>>the example isn't going to terminate, and therefore that the
>>implementation executing the code is broken? It seems to me (naively,
>>no doubt) that the assertion that example 1 terminates isn't testable in
>>finite time.
>>
>>- Roly
>>
>>Roly Perera
>>Ergnosis Ltd
>
>The problem is that putting specific time bounds or other qualitative
>numeric guarantees into a specification is too difficult. Whatever values
>we give now might not be appropriate in 20 years. Also, what if you want
>to implement a JVM as part of the Long Now project
>(http://www.longnow.org/), which might execute only one bytecode/hour?
>
>Saying that it must eventually terminates means that a compiler can't
>transform example 2 from

But your original informal statement is much stronger. It is imposing
requirements on Thread.yield not on the compiler. Imposing requirements on
Thread.yield is something I continue to object to.

It seems that this restatement in terms of compiler transformations is
approximately: when a thread does a yield it can't be holding more locks
than the plain semantics would allow. That is something I don't object to.

>Example 2:
>Initially, x = 0 (x is non-volatile in this example).
>
>Thread 1:
>int r1;
>do {
> Thread.yield();
> synchronized(this) {
> r1 = x;
> }
> } while (r1 == 0);
>
>Thread 2:
>synchronized(this) {
> x = 1
> }
>
>to
>
>Illegal modification of Example 2:
>Initially, x = 0 (x is non-volatile in this example).
>
>Thread 1:
>int r1;
>synchronized (this) {
>do {
> Thread.yield();
> r1 = x;
> } while (r1 == 0);
>}
>
>Thread 2:
>synchronized(this) {
> x = 1
> }
>
>which is all we are trying to prevent.
>-------------------------------
>JavaMemoryModel mailing list - http://www.cs.umd.edu/~pugh/java/memoryModel

-------------------------------
JavaMemoryModel mailing list - http://www.cs.umd.edu/~pugh/java/memoryModel



This archive was generated by hypermail 2b29 : Thu Oct 13 2005 - 07:00:36 EDT