Зависит от того, как используется список, но из того, что вы показали, выглядит неправильно.Итератор становится недействительным, если удаляется элемент, на который он ссылается: в этом случае элемент является shared_ptr
объектом в списке.
Как только вы освободите мьютекс, я думаю, что может появиться какой-то другой потоки удалите этот элемент.Вы не показали код, который это делает, но если это может произойти, то итераторы не должны «избегать» мьютекса.
Я предполагаю, что это «самосинхронизирующийся» контейнер, так как мьютекс является частными нет ничего в API, чтобы заблокировать это.Основная трудность в таких вещах состоит в том, что не является потокобезопасным для выполнения какой-либо итерации с ними извне.Достаточно просто создать потокобезопасную очередь, которая поддерживает:
- добавление элемента,
- удаление элемента по значению,
- удаление головы и возвраткопия его значения.
Кроме того, сложнее обеспечить полезные базовые операции, потому что почти все, что манипулирует списком любым интересным способом, должно выполняться полностью под замком.
Судя по всему, вы можете скопировать список с помощью GetRequestsList
и перебрать копию.Не уверен, принесет ли это вам пользу, так как копия мгновенно устарела.