> > I can't help but ask if the following is a legal transformation:
> >
> > thread.yield();
> > ==>
> > try {
> > thread.sleep(Long.MAX_VALUE);
> > }
> > catch (InterruptedException ex) {
> > thread.interrupt();
> > }
>
> Given that Java makes no guarantees of forward progress,
> isn't that a valid construct for a compiler to insert between
> any two instructions?
Indeed. And for the same reason a Java compiler can insert:
while (true);
between any two statements, with the only crime being poor provision of
service. Since the Java spec makes no temporal claims whatsoever, I
don't see how Thread.yield() can be defined other than by appealing to
intuition.
It's not dissimilar to the way a Java compiler can insert:
throw new OutOfMemoryError();
prior to any statement or expression which whose evaluation can complete
abruptly with an OutOfMemoryError, and still respect the semantics of
the language.
Roly Perera
Ergnosis Ltd
-------------------------------
JavaMemoryModel mailing list - http://www.cs.umd.edu/~pugh/java/memoryModel
This archive was generated by hypermail 2b29 : Thu Oct 13 2005 - 07:00:37 EDT