Рекомендуется ли возвращать итератор в списке в объекте, который используется и используется в многопоточной среде?Возвращение итератора в многопоточной среде, хорошая идея?
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
В этой конкретной теме верхний элемент удаляется каждый раз ... –
Ваш пример кода кажется странным. Если бы вы могли объяснить, почему ваш класс нуждается в члене итератора, ваш вопрос может быть более правильным ответом. –