When is to preempt safe?

Michael Blizek michi1 at michaelblizek.twilightparadox.com
Sun Oct 9 02:42:34 EDT 2011


Hi!

On 00:19 Sun 09 Oct     , Parmenides wrote:
> 2011/10/8 Chetan Nanda <chetannanda at gmail.com>:
> >
> > New task pick by scheduler may try to get the same lock resulting in
> > deadlock
> 
> It seems that this kind of deadlock may be removed eventually. Suppose
> that we have a task A, which is holding a spinlock. If A is preempted
> by task B which try to obtain the same spinlock. Although B has to
> busy wait, it will end up with be preempted owing to using up its
> timeslice. Therefore, A has chance to be selected by shechedler and
> release the spinlock. Then, B will go on when it is selected by the
> secheduler next time.

If you want your tasks to be preemptable while holding locks, I do not
recommend busywaiting locks, but rather putting task which tries to aquire a
busy lock should to sleep. The task which is holding the lock will then have a
chance to run and complete the critical section. In real time systems, the
priority of the task holding the lock is usually temporarily increased to the
priority of the process trying to aquire the lock.

	-Michi
-- 
programing a layer 3+4 network protocol for mesh networks
see http://michaelblizek.twilightparadox.com




More information about the Kernelnewbies mailing list