1
我有这样的代码是给错误:升压螺纹锁错误
error this boost::lock_error
error this boost::lock_error
error this boost::lock_error
error this boost::lock_error
error this boost::lock_error
因为我不知道在哪里,我会尝试复制代码中的错误:
主要
boost::tuple<ppa::Node*, ppa::Node*, ppa::Node*, bool> tuple = dups.back();
ppa::Node *n = boost::get<0>(tuple);
cout << "creating other threads" << endl;
for (int i = 0; i < 5; ++i)
{
cout << "making thread " << i << endl;
g.create_thread(boost::bind(threaded_function, boost::ref(mf),
boost::ref(n)));
}
线程
void threaded_function(Model_factory &mf, ppa::Node *root)
{
try
{
while(true)
{
boost::mutex::scoped_lock lock(result_mutex);
if(wait.empty())
{
lock.unlock();
break;
}
else
{
lock.lock();
if(!running_jobs.empty())
{
cout << "vector wait size = " << wait.size() << "\n";
cout << "running size = " << running_jobs.size() << "\n";
cout << "done size = " << done.size() << "\n";
boost::tuple<ppa::Node*, ppa::Node*, ppa::Node*, bool> tuple;
tuple = running_jobs.back();
running_jobs.pop_back();
...
}
...
}
...
}
}
catch (boost::lock_error& le)
{
cout << "error this " << le.what() << endl;
}
}
Ť他将代码用于我试图做的并行对齐程序,它将元组逐一对齐到不同的线程,直到等待列表(向量等待)为空。谢谢。 我已经做了一些事情,我把每个if和else之前的lock.unlock()
和现在的工作,但为什么?
确定,但FUNC不离开的范围,它停留在那里,所以我加解锁每个if和else之后,它的排序工作,边一些随机分段错误 – 2012-07-23 07:58:12
解锁是必要的,因为break语句将导致循环终止并且锁定超出范围(自动解锁)。第二个锁也是不必要的,因为锁已经通过创建范围锁来完成。也许你应该将范围锁移动到别的地方,或者直接用锁/解锁来控制互斥锁(根本不需要使用范围锁) – 2012-07-23 08:01:37
下面我看看它应该怎么走,你能举一些例子,谢谢。 – 2012-07-23 08:05:24