*From: *Lee Revell
*Date: * Sat Aug 20 2005 - 15:57:36 EST
------------------------------------------------------------------------
On Sat, 2005-08-20 at 11:38 -0700, Howard Chu wrote:
>/ But I also found that I needed to add a new /
>/ yield(), to work around yet another unexpected issue on this system -/
>/ we have a number of threads waiting on a condition variable, and the/
>/ thread holding the mutex signals the var, unlocks the mutex, and then /
>/ immediately relocks it. The expectation here is that upon unlocking/
>/ the mutex, the calling thread would block while some waiting thread/
>/ (that just got signaled) would get to run. In fact what happened is/
>/ that the calling thread unlocked and relocked the mutex without/
>/ allowing any of the waiting threads to run. In this case the only/
>/ solution was to insert a yield() after the mutex_unlock(). /
That's exactly the behavior I would expect. Why would you expect
unlocking a mutex to cause a reschedule, if the calling thread still has
timeslice left?
Lee