• [^] # Re: Verrou et RAII

    Posté par . En réponse à la dépêche Instantané sur le parallélisme et le code. Évalué à 2.

    En C++

    on crée un objet mutex qui utilise les fonctions mutex du système

     class mutex{
     system_mutex mut;
     public:
     mutex(){system_mutex_init(mut);}
     void lock(){system_mutex_lock(mut);}
     void unlock(){system_mutex_unlock(mut);}
    };

    puis un objet mutexeLocker qui gère :
    * le verrouillage dans le constructeur
    * le déverrouillage dans le destructeur

     class mutexeLocker {
     mutex &mut;
     public:
     mutexeLocker (mutex &_mut):mut(_mut){mut.lock();}
     ~ mutexeLocker (mutex &_mut):mut(_mut){mut.unlock();}
    };

    exemple d'utilisation :

    mutex mut_de_var;
    string var="";
    void f(string &str)
    {
     mutexLocker mutLocker(mut_de_var); //verrou
     var = str;
     fonction_avec_execption();
     cout << str
     //destruction de mutlocker déverrouillage implicite 
    }
    void thread_1()
    {
     int cpt=0;
     while(1){
     try(){
     f(string("thread1 : ")<<cpt );
     }
     catch(){}
     }
    }
    void thread_2()
    {
     int cpt=0;
     while(1){
     try(){
     f(string("thread2 : ")<<cpt );
     }
     catch(){}
     }
    }

    bon sous Qt et boost tout est fait et certainement mieux fait :)