В некоторых местах я видел людей, создающих пул потоков и создающих потоки и выполняющих функцию с этими потоками. При вызове этой функции 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
}