?
Eine Mutex zu locken ist GANZ was anderes, als einen Thread schlafen zu legen. Die Mutex stellt sicher, dass einen bestimmten Abschnitt nur EIN Thread gleichzeitig betreten kann. Ist die Mutex gelockt und ein weiterer Aufruf kommt an diese Mutex, dann wartet er, bis die Mutex wieder per unlock() vom blockierenden Thread freigegeben ist.
Du blockierst die Mutex, hängst dich fest auf immer und ewig...
Um eine bessere Lösung anbieten zu können, bräuchte es deine run().
Und eine kleine Einschätzung zum Schluss: Ich denke, es ist keine gute Idee, bei deinem aktuellen Kenntnisstand schon mit Threads anzufangen. Da gibt es einfach zu viele neue Fallstricke, die man beachten muss.