Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/10/2011, à 17:47

ehmicky

[C++]Synchronisation de threads, sans utiliser de mutexs globaux

Salut à tous,

J'aimerais exécuter plusieurs threads partageant une même ressource, mais je n'aime pas vraiment l'idée d'utiliser des objets globaux. J'aimerais donc éviter d'utiliser des mutexs globaux, pour que tout fait localement, selon une portée précise.
J'ai pensé donc à créer le mutex localement (en même temps que la ressource, en fait un membre de cette dernière) et à les passer par référence aux threads lancés via boost::ref et boost::bind :

#include    <boost/thread/thread.hpp>
#include    <boost/thread/locks.hpp>
#include    <boost/thread/mutex.hpp>
#include    <boost/function.hpp>
#include    <boost/bind.hpp>

class MyResource
{
        typedef boost::mutex MutexType;
        MutexType Mutex;
        ... Resource;
    public:
        void UseResource( int )
        {
            boost::lock_guard<MutexType> Locker( Mutex );
                ... Utilisation de Resource ...
        }        
};

int main(void)
{
    MyResource MyResourceVar;
    boost::function<void( int )> Functor( boost::bind( &MyResource::UseResource, boost::ref( MyResourceVar ), _1 ) );
    boost::thread_group ThreadGroup;
    for ( int Count = 0 ; Count < 10 ; Count++ )
        ThreadGroup.add_thread( new boost::thread( boost::ref( Functor ), Count ) );
    ThreadGroup.join_all();
  return 0;    
}

J'aimerais savoir s'il s'agit d'une bonne approche (thread-safe, et bon design), ou s'il existe une meilleure manière de procéder. Merci smile


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#2 Le 03/11/2011, à 19:22

ehmicky

Re : [C++]Synchronisation de threads, sans utiliser de mutexs globaux

up smile


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#3 Le 04/11/2011, à 16:14

Luc Hermitte

Re : [C++]Synchronisation de threads, sans utiliser de mutexs globaux

Quand on peut, on évite de partager.

Je t'invite à consulter les moult articles d'Herb Sutter sur le MT. Ils sont visibles depuis son blog, et dispos sur le DDJ

Hors ligne