現在、私のプロジェクトには 2 つの静的メソッドPushObjects
とProcessObject
. メソッドはデータを静的両端キューにプッシュバックし、このPushObject
メソッドは複数のスレッドからアクセスできますが、ProcessObject
常に単一のスレッドで使用され、オブジェクトを上から取得して削除するために使用されます。常に最終的に(遅かれ早かれdeque iterator not dereferencable
エラーが発生します。この問題を止めるために私ができることについての提案。私のPushObjects
との要約をProcessObject
以下に示します
void foo::PushObjects(obj A)
{
try
{
{//Begin Lock
boost::lock_guard<boost::mutex> lock(mutex_push);
mydeque.push_back(A);
}//End Lock
condition_read.notify_one(); //Inform the reader that it could start reading
}
catch (std::exception& e)
{
__debugbreak();
}
}
This is the static Reader method
void foo::ProcessObject()
{
{//Begin Lock
boost::unique_lock<boost::mutex> lock(mutex_process);
while(true)
{
while(mydeque.empty()) { condition_read.wait(lock); }
try
{
if(!mydeque.empty())
{
obj a = mydeque.front();
......Process the object........
mydeque.pop_front();
}
}
catch (std::exception& e)
{
__debugbreak();
}
}//end while
}//End lock
}
私が読んだことから、アイテムが両端キューに追加または削除されると、イテレータは無効になるということです。この問題を解決する方法はありますか。