#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();
}
 
deadlock.cpp.txt · Dernière modification: 2009/11/18 07:51 par mongaulois