私はエラーを出しているこのコードを持っています:
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;
}
}
このコードは、私が並行して行おうとしている整列プログラムで使用され、待機リスト (ベクトル待機) が空になるまで、異なるスレッドでタプルを 1 つずつ整列させます。ありがとう。私はlock.unlock()
すべてのifとelseの前に何かを置き、現在は機能していますが、なぜですか??