A mon avis si tu ne comprends pas les mutex tu n'as pas besoin de tutoriels plus complexes, plutôt plus complets. Cherche un tuto qui prend le multithreading de zéro.
Le mutex sert à faire en sorte de protéger différentes parties du programme pour s'assurer qu'elles ne s’exécutent pas en même temps. Donc elles doivent être protégées par le même mutex.
Par exemple si tu as un bout de code qui écrit dans un tableau, et un autre qui lit dans le même tableau, tu ne veux pas que ces deux morceaux de codes puissent s’exécuter en même temps dans deux threads de ton programme. (A moins d'utiliser un conteneur threadsafe.) Ainsi, tu "lock" les morceaux de code à protéger avec le mutex. Lorsqu'un thread lock le mutex, si l'autre thread arrive à la partie du programme qui est protégée par le même mutex, il devra attendre que le mutex soit libéré pour pouvoir le locker à son tour et exécuter la suite du code.
Utilise plutôt des lock que des mutex. Un lock bloque un mutex dans son constructeur et le débloque dans son destructeur. Ainsi en cas d'exception, le lock est détruit et libère automatiquement le mutex, ce qui évite que ton programme reste bloqué.