Pourquoi passer mutex comme paramètre à une fonction appelée par un fil?

À certains endroits, j'ai vu des gens de la création d'un pool de threads et la création de threads et de l'exécution d'une fonction avec les threads. Tout en appelant cette fonction boost::mutex est passé par référence. Pourquoi il est fait? Je crois que vous pouvez avoir un mutex déclaré dans la fonction appelée elle-même ou peut-être a déclaré un membre de la classe ou mondial. Quelqu'un peut expliquer?

par exemple

   myclass::processData()
   {
         boost::threadpool::pool pool(2);
         boost::mutex mutex;

         for (int i =0; data<maxData; ++data)
             pool.schedule(boost::bind(&myClass::getData, boost_cref(*this), boost::ref(mutex)));
    }

Puis,

    myClass::getData(boost::mutex& mutex)
    {
         boost::scoped_lock(mutex)    //Why can't we have class member variable mutex or                                     
                                      //local mutex here
        //Do somethign Here
}
Vous devez ajouter un exemple particulier où il est utilisé. C'est probablement à cause de la sémantique qui sont mis en œuvre dans l'exemple, et ne peut pas être répondu sans contexte à tous (sauf si vous voulez générique parce que ou sens réponses)

OriginalL'auteur polapts | 2011-09-26