在某些地方,我看到有人創建線程池並創建線程並使用這些線程執行函數。當調用該函數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
}
你應該添加一個特定的例子,在這裏使用它。這很可能是由於示例中實現的語義,並且根本沒有上下文就無法回答(除非你想通用*因爲*或*可能有意義*答案) –