目前在我的项目中,我有两个静态方法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
}
从我所读到的是,一旦从双端队列中添加或删除项目,迭代器就会变得无效。有没有办法解决这个问题。