Messages in this thread |  | | Date | Wed, 13 Oct 2004 10:55:59 -0400 | From | Neil Horman <> | Subject | Re: waiting on a condition |
| |
Martijn Sipkema wrote: > L.S. > > I'd like to do something similar as can be done using a POSIX condition > variable in the kernel, i.e. wait for some condition to become true. The > pthread_cond_wait() function allows atomically unlocking a mutex and > waiting on a condition. I think I should do something like: > (the condition is updated from an interrupt handler) > > disable interrupts > acquire spinlock > if condition not satisfied > add task to wait queue > set task to sleep > release spinlock > restore interrupts > schedule > > Now, this will only work with preemption disabled within the critical > section. How would something like this be done whith preemption > enabled? > you above algorithm seems rather prone to deadlock. Everything else in the kernel does more or less this operation by using a wait queue and a call to schedule to make tasks sleep until an event is signaled with a call to one of the wake_up family of functions. Then a spinlock is used to protect any critical data regions in smp environments. Search the kernel for calls to add_wait_queue and wake_up[_interruptible] for examples of how this is implemented.
HTH Neil
> > --ms > > > > > - > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/
-- /*************************************************** *Neil Horman *Software Engineer *Red Hat, Inc. *nhorman@redhat.com *gpg keyid: 1024D / 0x92A74FA1 *http://pgp.mit.edu ***************************************************/ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |