liveBook · Manning

No preemption

As explained in Learn Concurrent Programming with Go

No preemption is a deadlock condition in which resources held by an execution cannot be forcibly taken away and must be released by that execution.

No preemption is a deadlock condition: an execution keeps the resources it holds, and only that execution can release them. section 11.1.1

A rail-crossing deadlock

Imagine several trains, each occupying one crossing while waiting for another crossing held by the next train. Because no train can forcibly take a crossing away, the circular wait persists. section 11.1.1

Figure 11.5 Resource allocation graph for a rail deadlock

Use the resource allocation graph to trace how held resources and waiting executions form a deadlock. section 11.1.1

How Learn Concurrent Programming with Go covers it

How deep it goes
Defines the condition and illustrates it through rail crossings, but stops short of implementation remedies.
Examples
Uses trains competing for crossings and mentions relationship conflicts, negotiations, and road traffic.
What you can do after
Evaluate deadlock scenarios by checking whether held resources can be forcibly reclaimed.
How it connects
Connects no preemption with mutual exclusion, wait-for conditions, circular wait, and resource allocation graphs.

This explainer was generated by Manning's knowledge graph from the text of Learn Concurrent Programming with Go. The section links point to the parts of the book it draws on.