initial situation: head -> 1 -> 2 -> 3 -> 4 ->null ^ tail ------------------| A executes, saves local copy of tail, context switch, A sleeps: A: old_tail | 5->null v head -> 1 -> 2 -> 3 -> 4 ->null ^ tail ------------------| B executes, adds node 6 to queue, B done: A: old_tail | 5->null v head -> 1 -> 2 -> 3 -> 4 -> 6 ->null ^ tail -----------------------| context switch back to A, A wakes up, A continues: -------------- | | | v head -> 1 -> 2 -> 3 -> 4 -| 6 ->null 5 ->null ^ tail ----------------------------------| Result: node 6 gets "lost"! Both processes think they have successfully added new nodes to the queue.