在多線程環境中使用和共享的對象的列表中返回迭代器是否是一個好主意?在多線程環境中返回一個迭代器,一個好主意?
class RequestList
{
public:
RequestList::RequestList();
RequestList::~RequestList();
std::list<boost::shared_ptr<Request> >::iterator GetIterator();
int ListSize();
void AddItem(boost::shared_ptr<Request> request);
void RemoveItem(boost::shared_ptr<Request> request);
std::list<boost::shared_ptr<Request> > GetRequestsList();
boost::shared_ptr<Request> GetRequest();
private:
std::list<boost::shared_ptr<Request> > requests;
std::list<boost::shared_ptr<Request> >::iterator iter; //Iterator
boost::mutex listmtx;
};
std::list<boost::shared_ptr<Request> >::iterator RequestList::GetIterator()
{
return this->iter;
}
用途:
RequestList* requests;
在某些線程(可能會再次在其他線程使用)
std::list<boost::shared_ptr<Request> >::iterator iter = requests->GetIterator();
或者,它會更聰明,只是爲每個時間列表中的迭代器並在每個線程中使用它本地?
是修改的列表嗎? – Nikko 2010-10-11 12:14:09
在該特定線程中,每次都會刪除頂層項目... – 2010-10-11 12:21:17
您的示例代碼看起來很奇怪。如果你能解釋爲什麼你的類需要一個迭代器成員,你的問題可能是更合適的答案。 – 2010-10-11 12:39:29