On Sat, 15 Sep 2007, Kurt Miller wrote:

Hello Kris,

I recall why I added the os_sleep() call. While working on the certification
testing one of the JCK tests was deadlocking. The test itself was faulty in
that it created a high priority thread in a tight yield loop. Since
pthread_yield() on a single processor system will not yield to lower
priority threads, the higher priority thread effectively blocked the
lower priority thread from running and the test deadlocked.

I filed a formal appeal to have the JCK test corrected. However since the
api states:

  http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.html#yield()
   "Causes the currently executing thread object to temporarily pause
    and allow other threads to execute."

the appeal was denied. I further argued that many publications written
by or or-authored by Sun employees state that Thread.yield() can not
be relied upon in this fashion:

[ ... ]

It's odd that Sun would take this position since the POSIX behavior
for sched_yield() is:

      The sched_yield() function shall force the running thread to
      relinquish the processor until it again becomes the head of its
      thread list.  It takes no arguments.

The "its thread list" mentioned above is the list of threads for its
given priority.  POSIX has a notion of a list of threads for each
given priority; in SCHED_RR and SCHED_FIFO scheduling the higher
priority threads will always run before lower priority threads.

Sun's defined Java behavior, or their interpretation, of Thread.yield()
is not obtainable on a POSIX compliant system using sched_yield()
(or pthread_yield()).  Even using scope system threads or libthr,
the kernel scheduler should run the higher priority threads before
lower priority threads.

I suspect that Sun will eventually be forced to change their
documented behavior for Thread.yield().

--
DE
_______________________________________________
freebsd-performance@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-performance
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to