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