例如,我有一些由多个线程同时计算的工作。
出于演示目的,该工作在 while 循环内执行。在单次迭代中,每个线程执行自己的部分工作,在下一次迭代开始之前,计数器应该增加一次。
我的问题是计数器由每个线程更新。
由于这似乎是一件相对简单的事情,我认为有一个“最佳实践”或通用方法来解决它?
这是一些示例代码来说明问题并帮助讨论。(我正在使用提升线程)
class someTask {
public:
int mCounter; //initialized to 0
int mTotal; //initialized to i.e. 100000
boost::mutex cntmutex;
int getCount()
{
boost::mutex::scoped_lock lock( cntmutex );
return mCount;
}
void process( int thread_id, int numThreads )
{
while ( getCount() < mTotal )
{
// The main task is performed here and is divided
// into sub-tasks based on the thread_id and numThreads
// Wait for all thread to get to this point
cntmutex.lock();
mCounter++; // < ---- how to ensure this is only updated once?
cntmutex.unlock();
}
}
};