Зачем передать мьютекс в качестве параметра функции, вызываемой потоком?

В некоторых местах я видел людей, создающих пул потоков и создающих потоки и выполняющих функцию с этими потоками. При вызове этой функции boost :: mutex передается по ссылке. Почему это сделано? Я считаю, что вы можете объявить мьютекс в самой вызываемой функции или объявить его членом класса или глобальным. Кто-нибудь может объяснить?

например.

   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)));
    }

Затем,

    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
}
8
задан polapts 26 September 2011 в 14:56
поделиться