【发布时间】:2011-09-26 12:49:47
【问题描述】:
在某些地方,我看到人们创建线程池并创建线程并使用这些线程执行函数。在调用该函数时 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
}
【问题讨论】:
-
您应该添加一个使用它的特定示例。这很可能是由于示例中实现的语义,并且根本无法在没有上下文的情况下回答(除非您想要通用 只是因为 或 可能有意义 答案)
标签: c++ multithreading boost mutex