An arbitrator coordinates access to shared resources by granting a request only when every required resource is available. Otherwise, it suspends the goroutine until another operation releases resources, preventing deadlocks caused by partial acquisition. section 11.2.2
Coordinating bank transfers
A transfer requests both its source and target accounts through the arbitrator. Only after both are reserved does it subtract from the source and add to the target, then releases both accounts.
Diagram showing how a condition variable suspends goroutines while accounts are unavailable. section 11.2.2
