I am reading through "Clean Architecture: A Craftsman's Guide to Software Structure and Design" and it says that:
All race conditions, deadlock conditions, and concurrent update problems are due to mutable variables.
Functional programming languages do not allow variables to be mutable. I can see why race conditions and concurrent update problems require the existence of mutable variables. However, I don't see how deadlock conditions require mutable variables.
Can someone help me address my knowledge gap? Or is the author of the book incorrect in his statement about deadlock conditions?