&gt; deadlocks, a problem that is common, hard-to-avoid, and difficult to recover from<p>Deadlocks are by far the easiest concurrency problem to debug, since it&#x27;s <i>very</i> obvious when your program is deadlocked, and in most cases a stack trace of the involved threads is sufficient to debug and fix a deadlock.  Also, if your program is deadlocked it won&#x27;t corrupt user data.<p>Rust&#x27;s std::sync::Mutex is fortunately non-recursive, which makes it easier to find deadlocks during testing.<p>Data races are far worse since they may cause arbitrary effects at a later point in program execution, so they take a lot of developer time to track down and very likely lead to data corruption.