#include <QtCore> QMutex m1; QMutex m2; /*thread A : bloque m1 puis m2*/ class threadA : public QThread { protected : void run() { forever { qDebug() << "Thread A : essaie de bloquer m1"; m1.lock(); qDebug() << "Thread A : m1 bloque"; qDebug() << "Thread A : essaie de bloquer m2"; m2.lock(); qDebug() << "/******Thread A as bloque les deux mutex****/" << endl; m1.unlock(); m2.unlock(); } } }; /*thread B : bloque m2 puis m1*/ class threadB : public QThread { protected : void run() { forever { qDebug() << "\tThread B : essaie de bloquer m2"; m2.lock(); qDebug() << "\tThread B : m2 bloque"; qDebug() << "\tThread B : essaie de bloquer m1"; m1.lock(); qDebug() << "\t/*****Thread B as bloque les deux mutex****/" << endl; m2.unlock(); m1.unlock(); } } }; int main(int argc, char **argv) { //creation et lancement des threads threadA a; a.start(); threadB b; b.start(); //attente de la fin d'execution des deux threads a.wait(); b.wait(); }