Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 1

Livelock Example

/* PROCESS 0 */
flag[0] = true; // <- get lock 0
while (flag[1]){
flag[0] = false; // <- instead of sleeping, we do useless work
// needed by the lock mechanism
/*delay */; // <- wait for a second
flag[0] = true; // <- and restart useless work again.
}
/*critical section*/; // <- do what we need (this will never happen)
flag[0] = false;

/* PROCESS 1 */
flag[1] = true;
while (flag[0]) {
flag[1] = false;
/*delay */;
flag[1] = true;
}
/* critical section*/;
flag[1] = false;

...] consider the following sequence of events:

 P0 sets flag[0] to true.


 P1 sets flag[1] to true.
 P0 checks flag[1].
 P1 checks flag[0].
 P0 sets flag[0] to false.
 P1 sets flag[1] to false.
 P0 sets flag[0] to true.
 P1 sets flag[1] to true.
This sequence could be extended indefinitely, and neither process could enter its critical
section. Strictly speaking, this is not deadlock, because any alteration in the relative speed
of the two processes will break this cycle and allow one to enter the critical section. This
condition is referred to as livelock. Recall that deadlock occurs when a set of processes
wishes to enter their critical sections but no process can succeed. With livelock, there are
possible sequences of executions that succeed, but it is also possible to describe one or
more execution sequences in which no process ever enters its critical section.

Not content from the book anymore.

You might also like