You have no guarantee that `run` gets to the point in its execution where it locks the mutex before Thread 3 runs.

You need a second mutex that *this* thread blocks on. Thread1 will unlock it when it successfully locks `mut`.

This process should be repeated for each thread created below. Does this make sense?