cvs commit: src/sys/dev/md md.c
John Baldwin
jhb at FreeBSD.org
Thu Sep 16 18:53:42 PDT 2004
On Thursday 16 September 2004 08:59 pm, M. Warner Losh wrote:
> In message: <414A109E.4080601 at samsco.org>
>
> Scott Long <scottl at samsco.org> writes:
> : Or just use a semaphore.
>
> Or a condition variable.
That doesn't help, a condition variable doesn't have state like a semaphore.
The correct fix is to do this:
thread A
----------
mtx_lock();
adjust_state();
mtx_unlock();
wakeup();
thread B
---------
mtx_lock();
while (state_still_needs_sleep())
msleep(...)
mtx_unlock()
Proving that there is no race is left as an exercise to the reader. :)
--
John Baldwin <jhb at FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve" = http://www.FreeBSD.org
More information about the cvs-src
mailing list